home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / ab3record.s < prev    next >
Text File  |  1997-01-31  |  81KB  |  5,596 lines

  1.  
  2.  
  3. maxscrdiv EQU 8
  4. max3ddiv EQU 5
  5. playerheight EQU 12*1024
  6. scrheight EQU 80
  7.  
  8. xpos EQU 0    ;l
  9. zpos EQU 4    ;l
  10. zsinval EQU 8    ;w
  11. zcosval EQU 10    ;w
  12. ztox EQU 12    ;l
  13. xsinval EQU 16    ;w
  14. xcosval EQU 18    ;w
  15. xspd EQU 20    ;w
  16. zspd EQU 22    ;w
  17. mapx EQU 24    ;b
  18. mapz EQU 25    ;b
  19. whichtile EQU 26 ;b
  20. xofflight EQU 28    ;w
  21. zofflight EQU 30    ;w
  22. offlight EQU 32        ;w
  23. zlinestore EQU 34
  24. zlinedir EQU 38
  25. zposdir EQU 40
  26. zposstore EQU 42
  27. xdiststore EQU 44
  28. xdistdir EQU 46
  29. zwallfound EQU 48
  30.  
  31. xlinestore EQU 50
  32. xlinedir EQU 54
  33. xposdir EQU 56
  34. xposstore EQU 58
  35. zdiststore EQU 60
  36. zdistdir EQU 62
  37. xwallfound EQU 64
  38.  
  39.  
  40. midoffset EQU 104*4*40
  41.  
  42.  SECTION Scrn,CODE 
  43. OpenLib         equ -552
  44. CloseLib        equ -414
  45.  
  46. vhposr        equ $006    
  47. vhposrl        equ $007 
  48. bltcon0        equ $40 
  49. bltcon1        equ $42
  50. bltcpt        equ $48
  51. bltbpt        equ $4c
  52. bltapt        equ $50
  53. spr0ctl        equ $142
  54. spr1ctl        equ $14a
  55. spr2ctl        equ $152
  56. spr3ctl        equ $15a
  57. spr4ctl        equ $162
  58. spr5ctl        equ $16a
  59. spr6ctl        equ $172
  60. spr7ctl        equ $17a
  61. spr0pos        equ $140
  62. spr1pos        equ $148
  63. spr2pos        equ $150
  64. spr3pos        equ $158
  65. spr4pos        equ $160
  66. spr5pos        equ $168
  67. spr6pos        equ $170
  68. spr7pos        equ $178
  69. bltdpt         equ $54
  70. bltafwm        equ $44
  71. bltalwm        equ $46
  72. bltsize         equ $58
  73. bltcmod         equ $60
  74. bltbmod         equ $62
  75. bltamod         equ $64
  76. bltdmod         equ $66
  77. diwstart        equ $8e         ; Screen hardware registers.
  78. diwstop         equ $90
  79. ddfstart        equ $92
  80. ddfstop         equ $94
  81. bplcon0         equ $100
  82. bplcon1         equ $102
  83. col0            equ $180
  84. col1            equ $182
  85. col2        equ $184
  86. col3        equ $186
  87. col4        equ $188
  88. col5        equ $18a
  89. col6        equ $18c
  90. col7        equ $18e
  91. col8            equ $190
  92. col9            equ $192
  93. col10           equ $194
  94. dmacon        equ $96
  95. dmaconr        equ $002
  96. intenar        equ $01c
  97. intena        equ $09a
  98. intreq        equ $09c
  99. intreqr        equ $01e
  100. intreqrl    equ $01f
  101. bpl1pth         equ $e0
  102. bpl1ptl         equ $e2
  103. bpl2pth        equ $e4
  104. bpl2ptl        equ $e6
  105. bpl3pth        equ $e8
  106. bpl3ptl        equ $ea
  107. bpl4pth        equ $ec
  108. bpl4ptl        equ $ee
  109. bpl5pth        equ $f0
  110. bpl5ptl        equ $f2
  111. bpl6pth        equ $f4
  112. bpl6ptl        equ $f6
  113. bpl7pth        equ $f8
  114. bpl7ptl        equ $fa
  115. spr0pth        equ $120
  116. spr0ptl        equ $122
  117. spr1pth        equ $124
  118. spr1ptl        equ $126
  119. spr2pth        equ $128
  120. spr2ptl        equ $12a
  121. spr3pth        equ $12c
  122. spr3ptl        equ $12e
  123. spr4pth        equ $130
  124. spr4ptl        equ $132
  125. spr5pth        equ $134
  126. spr5ptl        equ $136
  127. spr6pth        equ $138
  128. spr6ptl        equ $13a
  129. spr7pth        equ $13c
  130. spr7ptl        equ $13e
  131.  
  132.  
  133. ** This waits for the blitter to finish before allowing program
  134. ** execution to continue.
  135.  
  136. WB MACRO
  137. \@bf:
  138.  btst #6,dmaconr(a6)
  139.  bne.s \@bf
  140.  ENDM
  141.  
  142. *Another version for when d6 <> dff000
  143.  
  144. WBSLOW MACRO
  145. \@bf:
  146.  btst #6,$dff000+dmaconr
  147.  bne.s \@bf
  148.  ENDM
  149.  
  150.  
  151. **
  152.  
  153.  include "macros.i"
  154.  include "ab3:source/defs.i"
  155.  
  156.  move.w (a0)+,option
  157.  move.w (a0)+,option+2
  158.  
  159. * Load level into buffers.
  160.  move.l 4.w,a6
  161.  move.l #doslibname,a1
  162.  moveq #0,d0
  163.  jsr -552(a6)
  164.  move.l d0,doslib
  165.  
  166.  move.l d0,a6
  167.  move.l #LDname,d1
  168.  move.l #1005,d2
  169.  jsr -30(a6)
  170.  move.l d0,LDhandle
  171.  
  172.  move.l doslib,a6
  173.  move.l d0,d1
  174.  move.l #LEVELDATA,d2
  175.  move.l #50000,d3
  176.  jsr -42(a6)
  177.  
  178.  move.l doslib,a6
  179.  move.l LDhandle,d1
  180.  jsr -36(a6)
  181.  
  182. ********
  183.  
  184.  move.l doslib,a6
  185.  move.l #LGname,d1
  186.  move.l #1005,d2
  187.  jsr -30(a6)
  188.  move.l d0,LGhandle
  189.  
  190.  move.l doslib,a6
  191.  move.l d0,d1
  192.  move.l #LEVELGRAPHICS,d2
  193.  move.l #15000,d3
  194.  jsr -42(a6)
  195.  
  196.  move.l doslib,a6
  197.  move.l LGhandle,d1
  198.  jsr -36(a6)
  199.  
  200. ********
  201.  
  202.  move.l doslib,a6
  203.  move.l #LCname,d1
  204.  move.l #1005,d2
  205.  jsr -30(a6)
  206.  move.l d0,LChandle
  207.  
  208.  move.l doslib,a6
  209.  move.l d0,d1
  210.  move.l #LEVELCLIPS,d2
  211.  move.l #34000,d3
  212.  jsr -42(a6)
  213.  
  214.  move.l doslib,a6
  215.  move.l LChandle,d1
  216.  jsr -36(a6)
  217.  
  218. *******
  219.  
  220.  move.l doslib,d0
  221.  move.l d0,a1
  222.  move.l 4.w,a6
  223.  jsr CloseLib(a6)
  224.  
  225.  
  226.  jmp stuff
  227. endstuff:
  228.  
  229.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  230.  move.w #$87c0,dmacon(a6)
  231.  move.w #$8020,dmacon(a6)
  232.  move.w intenar(a6),saveinters
  233.  move.w #$7fff,intena(a6)
  234.  move.w #$00ff,$dff09e
  235.  
  236. *** Put myself in supervisor mode
  237.  
  238.  move.l #blag,$80
  239.  trap #0
  240. ; move.l $6c,d0
  241. ; move.l #blag,$6c
  242. ; move.w #$8010,intreq(a6)
  243.  
  244.  rts
  245.  
  246. saveit: ds.l 10
  247. doslibname: dc.b 'dos.library',0
  248.  even
  249. doslib: dc.l 0
  250.  
  251. LDname: dc.b 'ab3:includes/newlev.bin',0
  252.  even
  253. LDhandle: dc.l 0
  254. LGname: dc.b 'ab3:includes/newlev.graph.bin',0
  255.  even
  256. LGhandle: dc.l 0
  257. LCname: dc.b 'ab3:includes/newlev.clips',0
  258.  even
  259. LChandle: dc.l 0
  260.  
  261. blag:
  262. ; move.w #$10,intreq(a6)
  263. ; move.l d0,$6c
  264. ; move.w #$7fff,intena(a6)
  265.  
  266.  move.w #$20,$dff1dc
  267.  
  268.  move.l $6c,saveit
  269.  move.l #Chan0inter,$6c
  270.  jsr KInt_Init
  271.  
  272.  
  273.  
  274. ****************************
  275. * Initialize level
  276. ****************************
  277. * Poke all clip offsets into
  278. * correct bit of level data.
  279. ****************************
  280.  lea.l LEVELGRAPHICS,a0
  281.  move.l 12(a0),a1
  282.  add.l a0,a1
  283.  move.l a1,ZoneGraphAdds
  284.  move.l (a0),a1
  285.  add.l a0,a1
  286.  move.l a1,DoorData
  287.  move.l 4(a0),a1
  288.  add.l a0,a1
  289.  move.l a1,LiftData
  290.  move.l 8(a0),a1
  291.  add.l a0,a1
  292.  move.l a1,SwitchData
  293.  adda.w #16,a0
  294.  move.l a0,ZoneAdds
  295.  
  296.  lea.l LEVELDATA,a1
  297.  move.l 16(a1),a2
  298.  add.l a1,a2
  299.  move.l a2,Points
  300.  move.l 20(a1),a2
  301.  add.l a1,a2
  302.  move.l a2,FloorLines
  303.  move.l 24(a1),a2
  304.  add.l a1,a2
  305.  move.l a2,ObjectData
  306.  move.l 28(a1),a2
  307.  add.l a1,a2
  308.  move.l a2,PlayerShotData
  309.  move.l 32(a1),a2
  310.  add.l a1,a2
  311.  move.l a2,NastyShotData
  312.  move.l 36(a1),a2
  313.  add.l a1,a2
  314.  move.l a2,ObjectPoints  
  315.  move.l 40(a1),a2
  316.  add.l a1,a2
  317.  move.l a2,PLR1_Obj
  318.  move.l 44(a1),a2
  319.  add.l a1,a2
  320.  move.l a2,PLR2_Obj
  321.  move.w 14(a1),NumObjectPoints
  322.  
  323. ; bra noclips
  324.   
  325.  lea.l LEVELCLIPS,a2
  326.  moveq #0,d0
  327.  move.w 10(a1),d7    ;numzones
  328. assignclips:
  329.  move.l (a0)+,a3
  330.  add.l a1,a3    ; pointer to a zone
  331.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  332. dowholezone:
  333.  tst.w (a3)
  334.  blt.s nomorethiszone
  335.  tst.w 2(a3)
  336.  blt.s thisonenull
  337.  
  338.  move.l d0,d1
  339.  asr.l #2,d1
  340.  move.w d1,2(a3)
  341.  
  342. findnextclip:
  343.  tst.l (a2,d0)
  344.  beq.s foundnextclip
  345.  addq #8,d0
  346.  bra.s findnextclip
  347. foundnextclip
  348.  addq #8,d0
  349. thisonenull:
  350.  addq #8,a3 
  351.  bra.s dowholezone
  352. nomorethiszone:
  353.  dbra d7,assignclips
  354.  
  355. noclips:
  356.  
  357. ************************************
  358.  
  359.  cmp.b #'k',option+3
  360.  bne.s nkb
  361.  st PLR1KEYS
  362.  clr.b PLR1PATH
  363.  clr.b PLR1MOUSE
  364. nkb:
  365.  cmp.b #'m',option+3
  366.  bne.s nmc
  367.  clr.b PLR1KEYS
  368.  clr.b PLR1PATH
  369.  st PLR1MOUSE
  370. nmc:
  371.  cmp.b #'p',option+3
  372.  bne.s nfp
  373.  clr.b PLR1KEYS
  374.  st.b PLR1PATH
  375.  clr.b PLR1MOUSE
  376. nfp:
  377.  
  378.  move.l #empty,pos1
  379.  move.l #empty,pos2
  380.  move.l #emptyend,Samp0end
  381.  move.l #emptyend,Samp1end
  382.  
  383.  move.l #nullspr,d0
  384.  move.w d0,s4l
  385.  move.w d0,s5l
  386.  move.w d0,s6l
  387.  move.w d0,s7l
  388.  swap d0
  389.  move.w d0,s4h
  390.  move.w d0,s5h
  391.  move.w d0,s6h
  392.  move.w d0,s7h 
  393.  
  394.  move.l #Panel,d0
  395.  move.w d0,p1l
  396.  swap d0
  397.  move.w d0,p1h
  398.  move.l #Panel+80*24,d0
  399.  move.w d0,p2l
  400.  swap d0
  401.  move.w d0,p2h
  402.  move.l #Panel+80*24*2,d0
  403.  move.w d0,p3l
  404.  swap d0
  405.  move.w d0,p3h
  406.  move.l #Panel+80*24*3,d0
  407.  move.w d0,p4l
  408.  swap d0
  409.  move.w d0,p4h
  410.  move.l #Panel+80*24*4,d0
  411.  move.w d0,p5l
  412.  swap d0
  413.  move.w d0,p5h
  414.  
  415. *******************************
  416. * TIMER SCREEN SETUP
  417.  move.l #TimerScr,d0
  418.  move.w d0,p1l
  419.  swap d0
  420.  move.w d0,p1h
  421.  move.w #$1201,Panelcon
  422.  
  423.  move.l #borders,d0
  424.  move.w d0,s0l
  425.  swap d0
  426.  move.w d0,s0h
  427.  move.l #borders+2064,d0
  428.  move.w d0,s1l
  429.  swap d0
  430.  move.w d0,s1h
  431.  move.l #borders+2064*2,d0
  432.  move.w d0,s2l
  433.  swap d0
  434.  move.w d0,s2h
  435.  move.l #borders+2064*3,d0
  436.  move.w d0,s3l
  437.  swap d0
  438.  move.w d0,s3h
  439.  
  440.  move.w #42*256+80,borders
  441.  move.w #42*256+2,borders+4
  442.  move.w #42*256+80,borders+2064
  443.  move.w #42*256+130,borders+4+2064
  444.  move.w #42*256+192,borders+2064*2
  445.  move.w #42*256+2,borders+4+2064*2
  446.  move.w #42*256+192,borders+2064*3
  447.  move.w #42*256+130,borders+4+2064*3
  448.  
  449.  move.l #FacePlace,d0
  450.  move.w d0,f1l
  451.  swap d0
  452.  move.w d0,f1h
  453.  move.l #FacePlace+32*24,d0
  454.  move.w d0,f2l
  455.  swap d0
  456.  move.w d0,f2h
  457.  move.l #FacePlace+32*24*2,d0
  458.  move.w d0,f3l
  459.  swap d0
  460.  move.w d0,f3h
  461.  move.l #FacePlace+32*24*3,d0
  462.  move.w d0,f4l
  463.  swap d0
  464.  move.w d0,f4h
  465.  move.l #FacePlace+32*24*4,d0
  466.  move.w d0,f5l
  467.  swap d0
  468.  move.w d0,f5h
  469.  
  470.  move.l #Blurb,d0
  471.  move.w d0,bl1l
  472.  swap d0
  473.  move.w d0,bl1h
  474.  
  475.  move.l #PanelCop,d0
  476.  move.w d0,pcl1
  477.  move.w d0,pcl2
  478.  swap d0
  479.  move.w d0,pch1
  480.  move.w d0,pch2
  481.  
  482.  move.l #bigfield,d0
  483.  move.w d0,ocl
  484.  swap d0
  485.  move.w d0,och
  486.  
  487.  bset.b #1,$bfe001
  488.  
  489.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  490.  move.l #$dff000,a6    ; a6 points at the first custom chip register.
  491.  move.w #$00ff,$dff09e
  492.  
  493. ; move.l #Blurbfield,$dff080
  494.  
  495.  move.w #0,d0
  496.  
  497.  move.l #scrn,d0
  498.  move.w d0,pl1l
  499.  swap d0
  500.  move.w d0,pl1h
  501.  
  502.  move.l #scrn+40,d0
  503.  move.w d0,pl2l
  504.  swap d0
  505.  move.w d0,pl2h
  506.  
  507.  move.l #scrn+80,d0
  508.  move.w d0,pl3l
  509.  swap d0
  510.  move.w d0,pl3h
  511.  
  512.  move.l #scrn+120,d0
  513.  move.w d0,pl4l
  514.  swap d0
  515.  move.w d0,pl4h
  516.  
  517.  move.l #scrn+160,d0
  518.  move.w d0,pl5l
  519.  swap d0
  520.  move.w d0,pl5h
  521.  
  522.  move.l #scrn+200,d0
  523.  move.w d0,pl6l
  524.  swap d0
  525.  move.w d0,pl6h
  526.  
  527.  move.l #scrn+240,d0
  528.  move.w d0,pl7l
  529.  swap d0
  530.  move.w d0,pl7h
  531.  
  532.  move.l #colbars,a0
  533.  move.l #colbars2,a2
  534.  move.w #scrheight-1,d0
  535.  move.l #0,d6
  536.  move.w #1,d3
  537.  move.w #$2bdf,startwait
  538.  move.w #$2d01,endwait
  539. fillcop
  540.  move.w #$180,d1
  541.  
  542.  move.l a0,a1
  543.  move.l a2,a3
  544.  move.w #$10c,(a1)+
  545.  move.w #$10c,(a3)+
  546.  move.w d3,(a1)+
  547.  move.w d3,(a3)+
  548.  eor.w #$8000,d3
  549.  
  550.  move.w #$106,(a1)+
  551.  move.w #$106,(a3)+
  552.  move.w #$2c42,d5
  553.  or.w d3,d5
  554.  and.w #$fffe,d5
  555.  move.w d5,(a1)+
  556.  move.w d5,(a3)+
  557.  bsr do32
  558.  
  559.  move.w #$106,(a1)+
  560.  move.w #$106,(a3)+
  561.  move.w #$4c42,d5
  562.  or.w d3,d5
  563.  and.w #$fffe,d5
  564.  move.w d5,(a1)+
  565.  move.w d5,(a3)+
  566.  bsr do32
  567.  
  568.  move.w #$106,(a1)+
  569.  move.w #$106,(a3)+
  570.  move.w #$6c42,d5
  571.  or.w d3,d5
  572.  and.w #$fffe,d5
  573.  move.w d5,(a1)+
  574.  move.w d5,(a3)+
  575.  bsr do32
  576.  
  577. **********************************
  578.  
  579.  cmp.b #'s',option
  580.  beq.s smallscrn
  581.  
  582.  move.w startwait,(a1)+
  583.  move.w #$fffe,(a1)+
  584.  move.w endwait,(a1)+
  585.  move.w #$ff00,(a1)+
  586.  move.w startwait,(a3)+
  587.  move.w #$fffe,(a3)+
  588.  move.w endwait,(a3)+
  589.  move.w #$ff00,(a3)+
  590.  
  591.  add.w #$300,startwait
  592.  add.w #$300,endwait
  593.  
  594. smallscrn: 
  595. **********************************
  596.  
  597.  adda.w #104*4,a0
  598.  adda.w #104*4,a2
  599.  
  600.  dbra d0,fillcop
  601.  
  602. **********************************
  603.  cmp.b #'s',option
  604.  beq smallnotlarge
  605.  move.w #$38,fetchstart
  606.  move.w #$b8,fetchstop
  607.  move.w #$2c81,winstart
  608.  move.w #$2cc1,winstop
  609.  move.w #-40,modulo
  610.  move.w #-40,modulo+4
  611.  
  612.  move.l #scrn+40,a0
  613.  move.l #scrn+160,a1
  614.  move.l #scrn+280,a2
  615.  move.l #scrntab,a3
  616.  move.w #319,d7    ; counter
  617.  move.w #0,d1    ; xpos
  618. plotscrnloop:
  619.  move.b (a3)+,d0
  620.  move.w d1,d2
  621.  asr.w #3,d2
  622.  move.b d1,d3
  623.  not.b d3
  624.  bclr.b d3,-40(a0,d2.w)
  625.  bclr.b d3,(a0,d2.w)
  626.  bclr.b d3,40(a0,d2.w)
  627.  bclr.b d3,-40(a1,d2.w)
  628.  bclr.b d3,(a1,d2.w)
  629.  bclr.b d3,40(a1,d2.w)
  630.  bclr.b d3,-40(a2,d2.w)
  631.  btst #0,d0
  632.  beq.s nobp1
  633.  bset.b d3,-40(a0,d2.w)
  634. nobp1:
  635.  btst #1,d0
  636.  beq.s nobp2
  637.  bset.b d3,(a0,d2.w)
  638. nobp2:
  639.  btst #2,d0
  640.  beq.s nobp3
  641.  bset.b d3,40(a0,d2.w)
  642. nobp3:
  643.  btst #3,d0
  644.  beq.s nobp4
  645.  bset.b d3,-40(a1,d2.w)
  646. nobp4:
  647.  btst #4,d0
  648.  beq.s nobp5
  649.  bset.b d3,(a1,d2.w)
  650. nobp5:
  651.  btst #5,d0
  652.  beq.s nobp6
  653.  bset.b d3,40(a1,d2.w)
  654. nobp6:
  655.  btst #6,d0
  656.  beq.s nobp7
  657.  bset.b d3,-40(a2,d2.w)
  658. nobp7:
  659.  
  660.  addq #1,d1
  661.  
  662.  dbra d7,plotscrnloop
  663.  
  664. smallnotlarge:
  665.  
  666. **********************************
  667.  
  668. ****************************
  669.  jsr INITPLAYER
  670. ; bsr initobjpos
  671. ****************************
  672.  
  673.  move.l #null,$dff0a0
  674.  move.w #100,$dff0a4
  675.  move.w #443,$dff0a6
  676.  move.w #63,$dff0a8
  677.  
  678.  move.l #null2,$dff0b0
  679.  move.w #100,$dff0b4
  680.  move.w #443,$dff0b6
  681.  move.w #63,$dff0b8
  682.  
  683.  move.l #null4,$dff0c0
  684.  move.w #100,$dff0c4
  685.  move.w #443,$dff0c6
  686.  move.w #63,$dff0c8
  687.  
  688.  move.l #null3,$dff0d0
  689.  move.w #100,$dff0d4
  690.  move.w #443,$dff0d6
  691.  move.w #63,$dff0d8
  692.  
  693.  move.l #tab,a1
  694.  move.w #64,d7
  695.  move.w #0,d6
  696. outerlop
  697.  move.l #pretab,a0
  698.  move.w #255,d5
  699. scaledownlop:
  700.  move.b (a0)+,d0
  701.  ext.w d0
  702.  ext.l d0
  703.  muls d6,d0
  704.  asr.l #6,d0
  705.  move.b d0,(a1)+
  706.  dbra d5,scaledownlop
  707.  addq #1,d6
  708.  dbra d7,outerlop
  709.  
  710.  move.l #$dff000,a6
  711.  
  712.  move.w #$c018,intena(a6)
  713.  
  714.  move.w #$f,dmacon(a6)
  715.  move.w #$820f,dmacon(a6)
  716.  
  717.  bsr FullEnergy
  718.  move.b #1,PLR1_GunDamage
  719.  move.b #1,PLR2_GunDamage
  720.  move.w #3,PLR1_GunNoise
  721.  move.w #3,PLR2_GunNoise
  722.  
  723. ; move.w #$20,$1dc(a6)
  724.  
  725.  move.w #$0,$dff034
  726.  move.w #0,Conditions
  727.  
  728.  
  729. lop: 
  730.  
  731.  move.l #$dff000,a6
  732.  
  733.  move.l drawpt,d0
  734.  move.l olddrawpt,drawpt
  735.  move.l d0,olddrawpt
  736.  move.l d0,$dff084
  737.  move.l drawpt,a3
  738.  adda.w #10,a3
  739.  move.l a3,frompt
  740.  add.l #104*4*40,a3
  741.  move.l a3,midpt
  742.  
  743. waitfortop:
  744.  btst.b #0,intreqrl(a6)
  745.  beq waitfortop
  746.  move.w #$1,intreq(a6)
  747.  
  748.  move.b SpaceTapped,SPCTAP
  749.  clr.b SpaceTapped
  750.  
  751.  move.l waterpt,a0
  752.  move.l (a0)+,watertouse
  753.  cmp.l #endwaterlist,a0
  754.  blt.s okwat
  755.  move.l #waterlist,a0
  756. okwat:
  757.  move.l a0,waterpt
  758.  
  759.  add.w #640,wtan
  760.  and.w #8191,wtan
  761.  add.w #1,wateroff
  762.  and.w #63,wateroff
  763.  
  764.  move.w FramesToDraw,TempFrames
  765.  move.w #0,FramesToDraw
  766.  
  767.  JSR INITTIMER
  768.  
  769.  bsr PlaceFace
  770.  bsr EnergyBar
  771.  
  772.  move.l RECORDPTR,a0
  773.  move.b TempFrames+1,d7
  774.  or.b d7,1(a0)
  775.  
  776.  bsr PLR1_Control
  777.  
  778. ; bsr PLR2_Control 
  779.  
  780. ******************************************
  781.  jsr objmoveanim
  782.  clr.b PLR1_clicked
  783.  clr.b PLR2_clicked
  784. ******************************************
  785.  
  786.  move.l ObjectPoints,a1
  787.  move.l PLR1_Obj,a0
  788.  move.b damagetaken(a0),d2
  789.  beq notbeenshot
  790.  ext.w d2
  791.  sub.w d2,Energy
  792.  move.b #0,damagetaken(a0)
  793.  move.l #Cheese,FacesPtr
  794.  move.w #3,Cheese
  795.  move.w #-1,FacesCounter
  796. notbeenshot:
  797.  move.b Energy+1,numlives(a0)
  798.  
  799.  move.w (a0),d0
  800.  move.l PLR1_xoff,(a1,d0.w*8)
  801.  move.l PLR1_zoff,4(a1,d0.w*8)
  802.  move.l PLR1_Roompt,a1
  803.  move.w (a1),12(a0)
  804.  move.l PLR1_yoff,d0
  805.  add.l #playerheight+128*24,d0
  806.  asr.l #7,d0
  807.  move.w d0,4(a0)
  808.  
  809.  move.l ObjectPoints,a1
  810.  move.l PLR2_Obj,a0
  811.  move.w (a0),d0
  812.  move.l PLR2_xoff,(a1,d0.w*8)
  813.  move.l PLR2_zoff,4(a1,d0.w*8)
  814.  move.l PLR2_Roompt,a1
  815. ************************
  816.  move.w (a1),12(a0)
  817.  move.w 10(a1),2(a0)
  818. ************************
  819.  move.l PLR2_yoff,d0
  820.  add.l #playerheight+128*24,d0
  821.  asr.l #7,d0
  822.  move.w d0,4(a0)
  823.  
  824.  
  825.  move.w #0,scaleval
  826.  
  827.  move.l PLR1_xoff,xoff
  828.  move.l PLR1_yoff,yoff
  829.  move.l PLR1_zoff,zoff
  830.  move.w PLR1_angpos,angpos
  831.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  832.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  833.  move.l PLR1_Roompt,Roompt
  834.  
  835.  move.w #0,leftclip
  836.  move.w #96,rightclip
  837.  move.w #0,deftopclip
  838.  move.w #79,defbotclip
  839.  move.w #0,topclip
  840.  move.w #79,botclip
  841. ; sub.l #10*104*4,frompt
  842. ; sub.l #10*104*4,midpt
  843.  
  844. * Subroom loop
  845.  
  846.  bsr DrawDisplay
  847.  
  848.  bra noglass
  849.  
  850. ************************************
  851. * Test glass routine:
  852. ************************************
  853.  
  854.  move.l #WorkSpace,a0
  855.  move.l frompt,a2
  856.  move.w #104*4,d3
  857.  move.w #1,d6
  858. ribl
  859.  move.w #31,d0
  860. readinto
  861.  move.w #15,d1
  862.  move.l a2,a1
  863. readintodown
  864.  move.w (a1),(a0)+
  865.  adda.w d3,a1
  866.  move.w (a1),(a0)+
  867.  adda.w d3,a1
  868.  move.w (a1),(a0)+
  869.  adda.w d3,a1
  870.  move.w (a1),(a0)+
  871.  adda.w d3,a1
  872.  dbra d1,readintodown
  873. ; add.w #256-128,a0
  874.  addq #4,a2
  875.  dbra d0,readinto
  876.  addq #4,a2
  877.  dbra d6,ribl
  878.  
  879. * We now have the screen in a buffer
  880. * for squidging.
  881.  
  882.  move.l frompt,a2
  883.  move.l #WorkSpace,a0
  884.  move.l glassballpt,a3
  885.  move.w #$fff,d7
  886.  move.w #1,d6 
  887. rfbl:
  888.  move.w #31,d0
  889. readoutfrom:
  890.  move.w #15,d1
  891.  move.l a2,a1
  892.  moveq.w #0,d5
  893. readoutfromdown:
  894.  move.w (a3)+,d2
  895.  beq.s nono1
  896. ; add.w d5,d2
  897.  move.w (a0,d2.w*2),d2
  898.  and.w d7,d2
  899.  move.w d2,(a1)
  900. nono1:
  901.  addq #1,d5
  902.  add.w d3,a1
  903.  move.w (a3)+,d2
  904.  beq.s nono2
  905. ; add.w d5,d2
  906.  move.w (a0,d2.w*2),d2
  907.  and.w d7,d2
  908.  move.w d2,(a1)
  909. nono2:
  910.  addq #1,d5
  911.  add.w d3,a1
  912.  move.w (a3)+,d2
  913.  beq.s nono3
  914. ; add.w d5,d2
  915.  move.w (a0,d2.w*2),d2
  916.  and.w d7,d2
  917.  move.w d2,(a1)
  918. nono3:
  919.  addq #1,d5
  920.  add.w d3,a1
  921.  move.w (a3)+,d2
  922.  beq.s nono4
  923. ; add.w d5,d2
  924.  move.w (a0,d2.w*2),d2
  925.  and.w d7,d2
  926.  move.w d2,(a1)
  927. nono4:
  928.  addq #1,d5
  929.  add.w d3,a1
  930.  dbra d1,readoutfromdown
  931.  addq #4,a2
  932. ; adda.w #128,a0
  933.  dbra d0,readoutfrom
  934.  addq #4,a2
  935.  dbra d6,rfbl
  936.  
  937.  move.l glassballpt,d0
  938.  add.l #64*64*2,d0
  939.  cmp.l #endglass,d0
  940.  blt notoffglass
  941.  move.l #glassball,d0
  942. notoffglass
  943.  move.l d0,glassballpt
  944.  
  945. noglass:
  946.  
  947.  tst.b PLR2
  948.  bra.s nodrawp2
  949.  
  950.  
  951.  move.l PLR2_xoff,xoff
  952.  move.l PLR2_yoff,yoff
  953.  move.l PLR2_zoff,zoff
  954.  move.w PLR2_angpos,angpos
  955.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  956.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  957.  
  958.  move.w #0,leftclip
  959.  move.w #96,rightclip
  960.  move.w #10,deftopclip
  961.  move.w #69,defbotclip
  962.  add.l #68*104*4,frompt
  963.  add.l #68*104*4,midpt
  964.  
  965.  bsr DrawDisplay
  966.  
  967.  
  968. nodrawp2:
  969.  
  970. ; move.l #brightentab,a0
  971. ; move.l frompt,a3
  972. ; adda.w #(4*33)+(104*4*20),a3
  973. ; move.w #20,d7
  974. ; move.w #20,d6
  975. ;horl:
  976. ; move.w d6,d5
  977. ; move.l a3,a1
  978. ;vertl
  979. ; move.w (a1),d0
  980. ; move.w (a0,d0.w*2),(a1)
  981. ; addq #4,a1
  982. ; dbra d5,vertl
  983. ; adda.w #104*4,a3
  984. ; dbra d7,horl
  985.  
  986.  move.l #$dff000,a6
  987.  
  988. ; move.w #$300,col0(a6)
  989.  
  990.  
  991.  btst #6,$bfe001
  992.  bne.s noend
  993. waitrel
  994.  btst #6,$bfe001
  995.  beq.s waitrel
  996.  bra end
  997. noend:
  998.  
  999.  tst.w Energy
  1000.  bge noendd
  1001.  move.w #10,Energy
  1002. noendd:
  1003.  
  1004.  JSR STOPTIMER
  1005.  
  1006.  bra lop
  1007.  
  1008. ***************************************************************************
  1009. ***************************************************************************
  1010. ****************** End of Main Loop here ********************************** 
  1011. ***************************************************************************
  1012. ***************************************************************************
  1013.  
  1014. Path:
  1015. ; incbin "testpath"
  1016. endpath:
  1017. pathpt: dc.l Path
  1018.  
  1019. PLR1KEYS: dc.b 0
  1020. PLR1PATH: dc.b 0
  1021. PLR1MOUSE: dc.b -1
  1022.  
  1023.  even
  1024.  
  1025. Bobble: dc.w 0
  1026. xwobble: dc.l 0
  1027. xwobxoff: dc.w 0
  1028. xwobzoff: dc.w 0
  1029.  
  1030. PLR1_Control:
  1031.  
  1032. ; Take a snapshot of everything.
  1033.  
  1034.  move.l PLR1_xoff,d2
  1035.  move.l d2,PLR1_oldxoff
  1036.  move.l d2,oldx
  1037.  move.l PLR1_zoff,d3
  1038.  move.l d3,PLR1_oldzoff
  1039.  move.l d3,oldz
  1040.  move.l PLR1s_xoff,d0
  1041.  move.l d0,PLR1_xoff
  1042.  move.l d0,newx
  1043.  move.l PLR1s_zoff,d1
  1044.  move.l d1,newz
  1045.  move.l d1,PLR1_zoff
  1046.  sub.l d2,d0
  1047.  sub.l d3,d1
  1048.  move.l d0,xdiff
  1049.  move.l d1,zdiff
  1050.  move.w PLR1s_sinval,PLR1_sinval
  1051.  move.w PLR1s_cosval,PLR1_cosval
  1052.  move.w PLR1s_angpos,PLR1_angpos
  1053.  move.l PLR1s_yoff,d0
  1054.  move.l #SineTable,a1
  1055.  move.w Bobble,d1
  1056.  move.w (a1,d1.w),d1
  1057.  move.w d1,d3
  1058.  ble.s notnegative
  1059.  neg.w d1
  1060. notnegative:
  1061.  add.w #16384,d1
  1062.  asr.w #5,d1
  1063.  move.w d1,d2
  1064.  add.w d1,d1
  1065.  add.w d2,d1
  1066.  ext.l d1
  1067.  add.l d1,d0
  1068.  
  1069.  asr.w #5,d3
  1070.  ext.l d3
  1071.  move.l d3,xwobble
  1072.  move.w PLR1_sinval,d1
  1073.  muls d3,d1
  1074.  move.w PLR1_cosval,d2
  1075.  muls d3,d2
  1076.  swap d1
  1077.  swap d2
  1078.  asr.w #6,d1
  1079.  move.w d1,xwobxoff
  1080.  asr.w #6,d2
  1081.  neg.w d2
  1082.  move.w d2,xwobzoff
  1083.  
  1084.  
  1085.  move.l d0,PLR1_yoff
  1086.  move.l d0,newy
  1087.  move.l #playerheight,thingheight
  1088.  move.l #40*256,StepUpVal
  1089.  
  1090.  move.l PLR1_Roompt,objroom
  1091.  move.w #%100000000,wallflags
  1092.  
  1093.  bsr MoveObject
  1094.  move.w #0,wallflags
  1095.  move.l objroom,PLR1_Roompt
  1096.  move.w newx,PLR1_xoff
  1097.  move.w newz,PLR1_zoff
  1098.  move.l PLR1_xoff,PLR1s_xoff
  1099.  move.l PLR1_zoff,PLR1s_zoff
  1100.  
  1101.  move.l PLR1_Roompt,a0
  1102.  move.l 2(a0),d0
  1103.  adda.w #ToZonePts,a0
  1104.  sub.l #playerheight,d0
  1105.  move.l d0,PLR1s_tyoff
  1106.  
  1107. ; move.l (a0),a0        ; jump to viewpoint list
  1108.  * A0 is pointing at a pointer to list of points to rotate
  1109.  move.w (a0)+,d1
  1110.  ext.l d1
  1111.  add.l PLR1_Roompt,d1
  1112.  move.l d1,PLR1_PointsToRotatePtr
  1113.  tst.w (a0)+
  1114.  beq.s nobackgraphics
  1115.  move.l a0,-(a7)
  1116.  jsr putinbackdrop 
  1117.  move.l (a7)+,a0
  1118. nobackgraphics:
  1119.  move.l a0,PLR1_ListOfGraphRooms
  1120.  
  1121. *****************************************************
  1122.  
  1123.  rts
  1124.  
  1125. KeyMap: ds.b 256
  1126.  
  1127. PLR2_Control:
  1128.  move.l #SineTable,a0
  1129.  
  1130.  bsr turnleftright
  1131.  
  1132.  move.w PLR2_angspd,d1
  1133.  move.w PLR2_angpos,d0
  1134.  move.w (a0,d0.w),PLR2_sinval
  1135.  adda.w #2048,a0
  1136.  move.w (a0,d0.w),PLR2_cosval
  1137.  
  1138.  move.l PLR2_xspdval,d6
  1139.  move.l PLR2_zspdval,d7
  1140.  
  1141.  move.w PLR2_xoff,oldxoff
  1142.  move.w PLR2_zoff,oldzoff
  1143.  
  1144.  neg.l d6
  1145.  ble.s .nobug1
  1146.  asr.l #1,d6
  1147.  add.l #1,d6
  1148.  bra.s .bug1
  1149. .nobug1
  1150.  asr.l #1,d6
  1151. .bug1:
  1152.  
  1153. ; beq.s goinnowhere
  1154. ; blt.s goinfor
  1155. ; cmp.l #4*65536,d6
  1156. ; ble.s goinnowhere
  1157. ; move.l #4*65536,d6
  1158. ;goinfor:
  1159. ; cmp.l #-4*65536,d6
  1160. ; bge.s goinnowhere
  1161. ; move.l #-4*65536,d6
  1162. ;goinnowhere:
  1163.  
  1164.  neg.l d7
  1165.  ble.s .nobug2
  1166.  asr.l #1,d7
  1167.  add.l #1,d7
  1168.  bra.s .bug2
  1169. .nobug2
  1170.  asr.l #1,d7
  1171. .bug2: 
  1172.  
  1173. ; beq.s goinnowhere2
  1174. ; blt.s goinfor2
  1175. ; cmp.l #4*65536,d7
  1176. ; ble.s goinnowhere2
  1177. ; move.l #4*65536,d7
  1178. ;goinfor2:
  1179. ; cmp.l #-4*65536,d7
  1180. ; bge.s goinnowhere2
  1181. ; move.l #-4*65536,d7
  1182. ;goinnowhere2:
  1183.  
  1184.  move.w PLR2_sinval,d1
  1185.  move.w PLR2_cosval,d2
  1186.  move.w PLR2_ForwardSpd,d3
  1187.  
  1188.  muls d3,d2
  1189.  muls d3,d1
  1190.  
  1191.  sub.l d1,d6
  1192.  sub.l d2,d7
  1193.  add.l PLR2_pushx,d6
  1194.  add.l PLR2_pushz,d7 
  1195.  add.l d6,PLR2_xspdval
  1196.  add.l d7,PLR2_zspdval
  1197.  move.l PLR2_xspdval,d6
  1198.  move.l PLR2_zspdval,d7
  1199.  add.l d6,PLR2_xoff
  1200.  add.l d7,PLR2_zoff
  1201.  
  1202.  move.w PLR2_xoff,newx
  1203.  move.w PLR2_zoff,newz
  1204.  move.w oldxoff,oldx
  1205.  move.w oldzoff,oldz
  1206.  move.l PLR2_xspdval,xdiff
  1207.  move.l PLR2_zspdval,zdiff
  1208.  move.l PLR2_Roompt,objroom
  1209.  move.w #%100000000,wallflags
  1210.  bsr MoveObject
  1211.  move.w #0,wallflags
  1212.  move.l objroom,PLR2_Roompt
  1213.  move.w newx,PLR2_xoff
  1214.  move.w newz,PLR2_zoff
  1215.  
  1216.  move.l PLR2_xoff,d0
  1217.  move.l PLR2_zoff,d1
  1218.  sub.l oldxoff,d0
  1219.  sub.l oldzoff,d1
  1220.  move.l #0,PLR2_pushx
  1221.  move.l #0,PLR2_pushz
  1222.  move.l d0,PLR2_opushx
  1223.  move.l d1,PLR2_opushz
  1224.  
  1225.  move.l PLR2_Roompt,a0
  1226.  move.l 2(a0),d0
  1227.  sub.l #playerheight,d0
  1228.  move.l d0,PLR2_tyoff
  1229.  adda.w #22,a0
  1230.  
  1231. ; move.l (a0),a0        ; jump to viewpoint list
  1232.  * A0 is pointing at a pointer to list of points to rotate
  1233.  move.l (a0)+,PLR2_PointsToRotatePtr
  1234.  move.l a0,PLR2_ListOfGraphRooms
  1235.  
  1236. *****************************************************
  1237.  
  1238.  move.l PLR2_tyoff,d0
  1239.  move.l PLR2_yoff,d1
  1240.  move.l PLR2_yvel,d2
  1241.  add.l d2,d1
  1242.  add.l #1024,d2
  1243.  sub.l d1,d0
  1244.  bgt.s .shouldfall
  1245.  move.l #0,d2
  1246.  add.l d0,d1
  1247. .shouldfall:
  1248.  move.l d2,PLR2_yvel
  1249.  move.l d1,PLR2_yoff
  1250.  rts
  1251.  
  1252.  
  1253. DrawDisplay:
  1254.  
  1255.  move.l #SineTable,a0
  1256.  move.w angpos,d0
  1257.  move.w (a0,d0.w),d6
  1258.  adda.w #2048,a0
  1259.  move.w (a0,d0.w),d7
  1260.  move.w d6,sinval
  1261.  move.w d7,cosval
  1262.  
  1263.  move.l yoff,d0
  1264.  asr.l #8,d0
  1265.  move.w d0,d1
  1266.  and.w #63,d1
  1267.  move.w d1,wallyoff
  1268.  asl.w #2,d0
  1269.  move.w d0,flooryoff
  1270.  
  1271.  move.w xoff,d6
  1272.  move.w d6,d3
  1273.  asr.w #1,d3
  1274.  add.w d3,d6
  1275.  asr.w #1,d6
  1276.  move.w d6,xoff34
  1277.  
  1278.  move.w zoff,d6
  1279.  move.w d6,d3
  1280.  asr.w #1,d3
  1281.  add.w d3,d6
  1282.  asr.w #1,d6
  1283.  move.w d6,zoff34
  1284.  
  1285.  bsr RotateLevelPts
  1286.  bsr RotateObjectPts
  1287.  bsr OrderZones
  1288.  
  1289.  move.l ListOfGraphRooms,a0
  1290.  
  1291.  move.l endoflist,a0
  1292. subroomloop:
  1293.  move.w -(a0),d7
  1294.  blt jumpoutofrooms
  1295.  
  1296. ; bsr setlrclip
  1297. ; move.w leftclip,d0
  1298. ; cmp.w rightclip,d0
  1299. ; bge subroomloop
  1300.  move.l a0,-(a7)
  1301.  move.l ZoneGraphAdds,a0
  1302.  move.l (a0,d7.w*4),a0
  1303.  add.l #LEVELGRAPHICS,a0
  1304.  move.l a0,ThisRoomToDraw
  1305.  
  1306.  move.l ListOfGraphRooms,a1
  1307.  
  1308. finditit:
  1309.  tst.w (a1)
  1310.  blt nomoretodoatall
  1311.  cmp.w (a1),d7
  1312.  beq outoffind
  1313.  adda.w #8,a1
  1314.  bra finditit
  1315.  
  1316. outoffind:
  1317.  
  1318.  move.l a1,-(a7)
  1319.  
  1320.  move.w #0,leftclip
  1321.  move.w #96,rightclip
  1322.  move.w 2(a1),d7
  1323.  blt.s outofcliplop
  1324.  move.l #LEVELCLIPS,a0
  1325.  lea (a0,d7.w*4),a0
  1326.      
  1327.  tst.l (a0)
  1328.  beq outofcliplop
  1329.  
  1330.  bsr NEWsetlrclip
  1331.  
  1332. intocliplop:        ; clips
  1333.  tst.l (a0)
  1334.  beq outofcliplop
  1335.  
  1336.  bsr NEWsetlrclip 
  1337.  bra intocliplop
  1338.  
  1339. outofcliplop:
  1340.  
  1341.  move.l ThisRoomToDraw,a0
  1342.  move.w leftclip,d0
  1343.  cmp.w #95,d0
  1344.  bge dontbothercantseeit
  1345.  move.w rightclip,d1
  1346.  blt dontbothercantseeit
  1347.  cmp.w d1,d0
  1348.  bge dontbothercantseeit
  1349.  
  1350.  bsr dothisroom
  1351.  
  1352. dontbothercantseeit:
  1353. pastemp:
  1354.  
  1355.  move.l (a7)+,a1
  1356.  move.l ThisRoomToDraw,a0
  1357.  move.w (a0),d7
  1358.  adda.w #8,a1
  1359.  bra finditit
  1360.  
  1361. nomoretodoatall:
  1362.  
  1363.  move.l (a7)+,a0
  1364.  
  1365.  bra subroomloop
  1366.  
  1367. jumpoutofrooms:
  1368.  
  1369.  rts
  1370.  
  1371. TempBuffer: ds.l 100 
  1372.  
  1373. ClipTable: ds.l 30
  1374. EndOfClipPt: dc.l 0
  1375.  
  1376. dothisroom
  1377.  
  1378.  move.w (a0)+,d0
  1379.  move.w d0,currzone
  1380.  move.l ZoneAdds,a1
  1381.  move.l (a1,d0.w*4),a1
  1382.  add.l #LEVELDATA,a1
  1383.  move.w 10(a1),ZoneBright
  1384.  
  1385. polyloop:
  1386.  move.w (a0)+,d0
  1387.  blt jumpoutofloop
  1388.  beq itsawall
  1389.  cmp.w #3,d0
  1390.  beq itsasetclip
  1391.  blt itsafloor
  1392.  cmp.w #4,d0
  1393.  beq itsanobject
  1394.  cmp.w #5,d0
  1395.  beq.s itsanarc
  1396.  cmp.w #6,d0
  1397.  beq itsalightbeam
  1398.  cmp.w #7,d0
  1399.  beq.s itswater
  1400.  cmp.w #9,d0
  1401.  ble itsachunkyfloor
  1402.  cmp.w #11,d0
  1403.  ble.s itsabumpyfloor
  1404.  cmp.w #12,d0
  1405.  beq.s itsbackdrop
  1406.  cmp.w #13,d0
  1407.  beq.s itsaseewall
  1408.  
  1409.  bra polyloop
  1410.  
  1411. itsaseewall:
  1412.  st seethru
  1413.  move.l #stripbufferthru,a1
  1414.  jsr itsawalldraw
  1415.  bra polyloop
  1416.  
  1417. itsbackdrop:
  1418.  jsr putinbackdrop
  1419.  bra polyloop
  1420.  
  1421. itswater:
  1422.  move.w #1,d0
  1423.  move.l #FloorLine,LineToUse
  1424.  st usewater
  1425.  clr.b usebumps
  1426.  jsr itsafloordraw
  1427.  bra polyloop
  1428.  
  1429. itsanarc:
  1430.  jsr CurveDraw
  1431.  bra polyloop
  1432. itsanobject:
  1433.  jsr ObjDraw
  1434.  bra polyloop
  1435. itsalightbeam:
  1436.  jsr LightDraw
  1437.  bra polyloop
  1438.  
  1439. itsabumpyfloor:
  1440.  sub.w #9,d0
  1441.  st usebumps
  1442.  st smoothbumps
  1443.  clr.b usewater
  1444.  move.l #BumpLine,LineToUse
  1445.  jsr itsafloordraw
  1446.  bra polyloop
  1447.  
  1448. itsachunkyfloor:
  1449.  subq.w #7,d0
  1450.  st usebumps
  1451.  sub.w #12,topclip
  1452. ; add.w #10,botclip
  1453.  clr.b smoothbumps
  1454.  clr.b usewater
  1455.  move.l #BumpLine,LineToUse
  1456.  jsr itsafloordraw
  1457.  add.w #12,topclip
  1458. ; sub.w #10,botclip
  1459.  bra polyloop 
  1460.  
  1461. itsafloor:
  1462.  
  1463.  move.l #FloorLine,LineToUse
  1464. * 1,2 = floor/roof
  1465.  clr.b usewater
  1466.  clr.b usebumps
  1467.  jsr itsafloordraw
  1468.  bra polyloop
  1469. itsasetclip:
  1470.  bra polyloop
  1471. itsawall:
  1472.  clr.b seethru
  1473.  move.l #stripbuffer,a1
  1474.  jsr itsawalldraw
  1475.  bra polyloop
  1476.  
  1477. jumpoutofloop:
  1478.  rts
  1479.  
  1480. ThisRoomToDraw: dc.l 0
  1481.  
  1482.  include "ab3:source/OrderZones"
  1483.  
  1484. ReadMouse:
  1485.  clr.l d0
  1486.  clr.l d1
  1487.  move.w $a(a6),d0
  1488.  lsr.w #8,d0
  1489.  ext.l d0
  1490.  move.w d0,d3
  1491.  move.w oldy,d2
  1492.  sub.w d2,d0
  1493.  
  1494.  cmp.w #127,d0
  1495.  blt nonegy
  1496.  move.w #255,d1
  1497.  sub.w d0,d1
  1498.  move.w d1,d0
  1499.  neg.w d0
  1500. nonegy:
  1501.  
  1502.  cmp.w #-127,d0
  1503.  bge nonegy2
  1504.  move.w #255,d1
  1505.  add.w d0,d1
  1506.  move.w d1,d0
  1507. nonegy2:
  1508.  
  1509.  add.b d0,d2
  1510.  add.w d0,oldy2
  1511.  move.w d2,oldy
  1512.  move.w d2,d0
  1513.  
  1514.  move.w oldy2,d0
  1515.  move.w d0,ymouse
  1516.  
  1517.  clr.l d0
  1518.  clr.l d1
  1519.  move.w $a(a6),d0
  1520.  ext.w d0
  1521.  ext.l d0
  1522.  move.w d0,d3
  1523.  move.w oldmx,d2
  1524.  sub.w d2,d0
  1525.  
  1526.  cmp.w #127,d0
  1527.  blt nonegx
  1528.  move.w #255,d1
  1529.  sub.w d0,d1
  1530.  move.w d1,d0
  1531.  neg.w d0
  1532. nonegx:
  1533.  
  1534.  cmp.w #-127,d0
  1535.  bge nonegx2
  1536.  move.w #255,d1
  1537.  add.w d0,d1
  1538.  move.w d1,d0
  1539. nonegx2:
  1540.  
  1541.  add.b d0,d2
  1542.  move.w d0,d1
  1543.  move.w d2,oldmx
  1544.  
  1545.  
  1546.  move.w #$0,$dff034
  1547.  btst #2,$dff016
  1548.  beq.s noturn
  1549.  
  1550.  add.w d0,oldx2
  1551.  move.w oldx2,d0
  1552.  and.w #2047,d0
  1553.  move.w d0,oldx2
  1554.  
  1555.  asl.w #2,d0
  1556.  sub.w prevx,d0
  1557.  add.w d0,prevx
  1558.  add.w d0,PLR1s_angpos
  1559.  move.w #0,lrs
  1560.  rts
  1561.  
  1562. noturn:
  1563.  
  1564. ; got to move lr instead. 
  1565.  
  1566. ; d1 = speed moved l/r
  1567.  
  1568.  move.w d1,lrs
  1569.  
  1570.  rts
  1571.  
  1572. lrs: dc.w 0
  1573. prevx: dc.w 0
  1574.  
  1575. mang: dc.w 0
  1576. oldymouse: dc.w 0
  1577. xmouse: dc.w 0
  1578. ymouse: dc.w 0
  1579. oldx2: dc.w 0
  1580. oldmx: dc.w 0
  1581. oldy: dc.w 0
  1582. oldy2: dc.w 0
  1583.  
  1584. RotateLevelPts:
  1585.  
  1586.  move.w sinval,d6
  1587.  swap d6
  1588.  move.w cosval,d6
  1589.  
  1590.  move.l PointsToRotatePtr,a0
  1591.  move.l Points,a3
  1592.  move.l #Rotated,a1
  1593.  move.l #OnScreen,a2
  1594.  move.w xoff,d4
  1595.  move.w zoff,d5
  1596.  
  1597. ; move.w #$c40,$dff106
  1598. ; move.w #$f00,$dff180
  1599.  
  1600. pointrotlop:
  1601.  move.w (a0)+,d7
  1602.  blt.s outofpointrot
  1603.  
  1604.  move.w (a3,d7*4),d0
  1605.  sub.w d4,d0
  1606.  move.w d0,d2
  1607.  move.w 2(a3,d7*4),d1
  1608.  sub.w d5,d1
  1609.  muls d6,d2
  1610.  swap d6
  1611.  move.w d1,d3
  1612.  muls d6,d3
  1613.  sub.l d3,d2
  1614.  add.l d2,d2
  1615.  swap d2
  1616.  ext.l d2
  1617.  asl.l #7,d2
  1618.  add.l xwobble,d2
  1619.  move.l d2,(a1,d7*8)
  1620.  
  1621.  muls d6,d0
  1622.  swap d6
  1623.  muls d6,d1
  1624.  add.l d0,d1
  1625.  asl.l #2,d1
  1626.  swap d1
  1627.  move.l d1,4(a1,d7*8)
  1628.  
  1629.  tst.w d1
  1630.  bgt.s ptnotbehind
  1631.  tst.w d2
  1632.  bgt.s onrightsomewhere
  1633.  move.w #0,d2
  1634.  bra putin
  1635. onrightsomewhere:
  1636.  move.w #96,d2
  1637.  bra putin
  1638. ptnotbehind:
  1639.  
  1640.  divs d1,d2
  1641.  add.w #47,d2
  1642. putin:
  1643.  move.w d2,(a2,d7*2)
  1644.  
  1645.  bra pointrotlop
  1646. outofpointrot:
  1647.  
  1648. ; move.w #$c40,$dff106
  1649. ; move.w #$ff0,$dff180
  1650.  
  1651.  rts
  1652.  
  1653. RotateObjectPts:
  1654.  
  1655.  move.w sinval,d5
  1656.  move.w cosval,d6
  1657.  
  1658.  move.l ObjectPoints,a0
  1659.  move.w NumObjectPoints,d7
  1660.  move.l #ObjRotated,a1
  1661.  move.l #ObsInLine,a2
  1662. objpointrotlop:
  1663.  
  1664.  move.w (a0),d0
  1665.  sub.w xoff,d0
  1666.  move.w 4(a0),d1
  1667.  addq #8,a0
  1668.  sub.w zoff,d1
  1669.  move.w d0,d2
  1670.  muls d6,d2
  1671.  move.w d1,d3
  1672.  muls d5,d3
  1673.  sub.l d3,d2
  1674.  add.l d2,d2
  1675.  swap d2
  1676.  move.w d2,(a1)+
  1677.  
  1678.  muls d5,d0
  1679.  muls d6,d1
  1680.  add.l d0,d1
  1681.  asl.l #2,d1
  1682.  swap d1
  1683.  moveq #0,d3
  1684.  
  1685.  move.w d1,(a1)+
  1686.  ext.l d2
  1687.  asl.l #7,d2
  1688.  add.l xwobble,d2
  1689.  move.l d2,(a1)+
  1690.  sub.l xwobble,d2
  1691.  tst.w d1
  1692.  ble.s notinline
  1693.  
  1694.  cmp.l #-60*128,d2
  1695.  blt.s notinline
  1696.  cmp.l #60*128,d2
  1697.  sle d3
  1698. notinline
  1699.  move.b d3,(a2)+
  1700.  
  1701.  dbra d7,objpointrotlop
  1702.  
  1703.  rts
  1704.  
  1705. LightDraw:
  1706.  
  1707.  move.w (a0)+,d0
  1708.  move.w (a0)+,d1
  1709.  move.l #Rotated,a1
  1710.  move.w 6(a1,d0.w*8),d2
  1711.  ble.s oneendbehind
  1712.  move.w 6(a1,d1.w*8),d3
  1713.  bgt.s bothendsinfront
  1714.  
  1715. oneendbehind:
  1716.  rts
  1717. bothendsinfront:
  1718.  
  1719.  move.l #OnScreen,a2
  1720.  move.w (a2,d0.w*2),d0
  1721.  bge.s okleftend
  1722.  moveq #0,d0
  1723. okleftend:
  1724.  move.w (a2,d1.w*2),d1
  1725.  bgt.s somevis
  1726.  rts
  1727. somevis:
  1728.  cmp.w #95,d0
  1729.  ble.s somevis2
  1730.  rts
  1731. somevis2:
  1732.  cmp.w #95,d1
  1733.  ble.s okrightend
  1734.  move.w #95,d1
  1735. okrightend:
  1736.  
  1737.  sub.w d0,d1
  1738.  blt.s wrongbloodywayround
  1739.  move.l #brightentab,a4
  1740.  move.l #objintocop,a1
  1741.  lea (a1,d0.w*2),a1
  1742.  
  1743.  move.l frompt,a3
  1744.  move.w #104*4,d6
  1745.  move.w #79,d2
  1746. lacross:
  1747.  move.w d2,d3
  1748.  move.l a3,a2
  1749.  adda.w (a1)+,a2
  1750. ldown:
  1751.  add.w d6,a2
  1752.  move.w (a2),d7
  1753.  move.w (a4,d7.w*2),(a2)
  1754.  dbra d3,ldown
  1755.  dbra d1,lacross
  1756.  
  1757. wrongbloodywayround:
  1758.  
  1759.  rts
  1760.  
  1761. FaceToPlace: dc.w 0
  1762.  
  1763. Cheese:
  1764.  dc.w 4,15
  1765.  
  1766. FacesList:
  1767.  dc.w 0,4*4
  1768.  dc.w 1,2*4
  1769.  dc.w 0,2*4
  1770.  dc.w 2,2*4
  1771.  dc.w 0,2*4
  1772.  dc.w 1,3*4
  1773.  dc.w 0,2*4
  1774.  dc.w 2,3*4
  1775.  dc.w 0,5*4
  1776.  dc.w 1,2*4
  1777.  dc.w 0,2*4
  1778.  dc.w 2,2*4
  1779.  dc.w 0,2*4
  1780.  dc.w 1,2*4
  1781.  dc.w 0,2*4
  1782.  dc.w 2,3*4
  1783.  dc.w 0,1*4
  1784.  dc.w 1,3*4
  1785.  dc.w 0,1*4
  1786.  dc.w 2,3*4
  1787.  dc.w 0,1*4
  1788.  
  1789. EndOfFacesList:
  1790.  
  1791. FacesPtr:
  1792.  dc.l FacesList
  1793. FacesCounter:
  1794.  dc.w 0
  1795. Expression:
  1796.  dc.w 0
  1797.  
  1798. PlaceFace:
  1799.  
  1800.  move.w FacesCounter,d0
  1801.  subq #1,d0
  1802.  bgt.s NoNewFace
  1803.  
  1804.  move.l FacesPtr,a0
  1805.  
  1806.  move.w 2(a0),d0
  1807.  move.w (a0),Expression
  1808.  addq #4,a0
  1809.  cmp.l #EndOfFacesList,a0
  1810.  blt.s NotFirstFace
  1811.  
  1812.  move.l #FacesList,a0
  1813.  
  1814. NotFirstFace
  1815.  move.l a0,FacesPtr
  1816.  
  1817. NoNewFace:
  1818.  
  1819.  move.w d0,FacesCounter
  1820.  
  1821.  Move.w FaceToPlace,d0
  1822.  muls #5,d0
  1823.  add.w Expression,d0
  1824.  move.l #FacePlace+10,a0
  1825.  move.l #Faces,a1
  1826.  muls #(4*32*5),d0
  1827.  adda.w d0,a1
  1828.  move.w #4,d0
  1829.  move.w #24,d1
  1830.  
  1831.  move.w #4,d3
  1832. bitplaneloop:
  1833.  move.w #31,d2
  1834. PlaceFaceToPlaceInFacePlaceLoop:
  1835.  move.l (a1),(a0)
  1836.  adda.w d0,a1
  1837.  adda.w d1,a0
  1838.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  1839.  dbra d3,bitplaneloop
  1840.  
  1841.  rts
  1842.  
  1843. Energy:
  1844.  dc.w 191
  1845. OldEnergy:
  1846.  dc.w 191
  1847.  
  1848. FullEnergy:
  1849.  move.w #191,Energy
  1850.  move.w #191,OldEnergy
  1851.  move.l #Panel+41*24,a0
  1852.  move.w #6*6-1,d0
  1853. fillbar:
  1854.  move.l #$fefefefe,(a0)+
  1855.  dbra d0,fillbar
  1856.  rts
  1857.  
  1858. EnergyBar:
  1859.  
  1860.  move.w Energy,d0
  1861.  move.w #192,d1
  1862.  sub.w d0,d1
  1863.  ext.l d1
  1864.  divs #39,d1
  1865.  move.w d1,FaceToPlace
  1866.  cmp.w OldEnergy,d0
  1867.  bne.s gottochange
  1868.  
  1869. NoChange
  1870.  rts
  1871.  
  1872. gottochange:
  1873.   
  1874.  blt LessEnergy
  1875.  cmp.w #191,Energy
  1876.  blt.s NotMax
  1877.  move.w #191,Energy
  1878. NotMax:
  1879.  
  1880.  move.w Energy,d0
  1881.  move.w OldEnergy,d2
  1882.  sub.w d0,d2
  1883.  beq.s NoChange
  1884.  neg.w d2
  1885.  
  1886.  move.w OldEnergy,d3
  1887.  
  1888.  move.l #Panel+41*24,a0
  1889. EnergyRise:
  1890.  move.w d3,d0
  1891.  move.b d0,d1
  1892.  not.b d1
  1893.  and.b #7,d1
  1894.  beq.s noplot
  1895.  asr.w #3,d0
  1896.  lea (a0,d0.w),a1
  1897.  bset.b d1,(a1)
  1898.  bset.b d1,24(a1)
  1899.  bset.b d1,24*2(a1)
  1900.  bset.b d1,24*3(a1)
  1901.  bset.b d1,24*4(a1)
  1902.  bset.b d1,24*5(a1)
  1903. noplot:
  1904.  addq #1,d3
  1905.  subq #1,d2
  1906.  bgt.s EnergyRise
  1907.  
  1908.  move.w Energy,OldEnergy
  1909.  
  1910.  rts 
  1911.  
  1912.  
  1913. LessEnergy: 
  1914.  move.w OldEnergy,d2
  1915.  sub.w d0,d2
  1916.  
  1917.  move.w OldEnergy,d3
  1918.  
  1919.  move.l #Panel+41*24,a0
  1920. EnergyDrain:
  1921.  move.w d3,d0
  1922.  move.b d0,d1
  1923.  not.b d1
  1924.  asr.w #3,d0
  1925.  lea (a0,d0.w),a1
  1926.  bclr.b d1,(a1)
  1927.  bclr.b d1,24(a1)
  1928.  bclr.b d1,24*2(a1)
  1929.  bclr.b d1,24*3(a1)
  1930.  bclr.b d1,24*4(a1)
  1931.  bclr.b d1,24*5(a1)
  1932.  subq #1,d3
  1933.  subq #1,d2
  1934.  bgt.s EnergyDrain
  1935.  
  1936.  move.w Energy,OldEnergy
  1937.  
  1938.  rts 
  1939.  
  1940. end:
  1941.  jmp closeeverything 
  1942.  
  1943. do32:
  1944.  move.w #31,d7
  1945.  move.w #$180,d1
  1946. across:
  1947.  move.w d1,(a1)+
  1948.  move.w d1,(a3)+
  1949.  move.w #0,(a1)+
  1950.  move.w #0,(a3)+
  1951.  add.w #2,d1
  1952.  dbra d7,across
  1953.  rts
  1954.  
  1955.  
  1956.  
  1957. *************************************
  1958. * Set left and right clip values
  1959. *************************************
  1960.  
  1961.  
  1962.  
  1963. NEWsetlrclip:
  1964.  move.l #OnScreen,a1
  1965.  move.l #Rotated,a2
  1966.  
  1967.  move.w (a0),d0
  1968.  bge.s .notignoreleft
  1969.  
  1970. ; move.l #0,(a6)
  1971.  
  1972.  bra .leftnotoktoclip
  1973. .notignoreleft:
  1974.  
  1975.  move.w 6(a2,d0*8),d3    ; left z val
  1976.  bgt.s .leftclipinfront
  1977.  
  1978.  move.w 4(a0),d0
  1979.  blt.s .ignoreboth
  1980.  tst.w 6(a2,d0*8)
  1981.  bgt.s .leftnotoktoclip
  1982. .ignoreboth:
  1983. ; move.l #0,(a6)
  1984. ; move.l #96*65536,4(a6)
  1985.  move.w #0,leftclip
  1986.  move.w #96,rightclip
  1987.  addq #8,a6
  1988.  addq #8,a0
  1989.  rts
  1990.  
  1991. .leftclipinfront:
  1992.  move.w (a1,d0*2),d1    ; left x on screen
  1993.  move.w 2(a0),d2
  1994.  move.w (a1,d2.w*2),d2
  1995.  cmp.w d1,d2
  1996.  bgt.s .leftnotoktoclip
  1997.  
  1998. ; move.w d1,(a6)
  1999. ; move.w d3,2(a6)
  2000.  cmp.w leftclip(pc),d1
  2001.  ble.s .leftnotoktoclip
  2002.  move.w d1,leftclip
  2003. .leftnotoktoclip:
  2004.  
  2005.  move.w 4(a0),d0
  2006.  bge.s .notignoreright
  2007. ; move.w #96,4(a6)
  2008. ; move.w #0,6(a6)
  2009.  move.w #0,d4
  2010.  bra .rightnotoktoclip
  2011. .notignoreright:
  2012.  move.w 6(a2,d0*8),d4    ; right z val
  2013.  bgt.s .rightclipinfront
  2014. ; move.w #96,4(a6)
  2015. ; move.w #0,6(a6)
  2016.  bra.s .rightnotoktoclip
  2017.  
  2018. .rightclipinfront:
  2019.  move.w (a1,d0*2),d1    ; right x on screen
  2020.  move.w 6(a0),d2
  2021.  move.w (a1,d2.w*2),d2
  2022.  cmp.w d1,d2
  2023.  blt.s .rightnotoktoclip
  2024. ; move.w d1,4(a6)
  2025. ; move.w d4,6(a6)
  2026.  
  2027.  cmp.w rightclip(pc),d1
  2028.  bge.s .rightnotoktoclip
  2029.  addq #1,d1
  2030.  move.w d1,rightclip
  2031. .rightnotoktoclip:
  2032.  addq #8,a6
  2033.  addq #8,a0
  2034.  rts
  2035.  
  2036. FIRSTsetlrclip:
  2037.  move.l #OnScreen,a1
  2038.  move.l #Rotated,a2
  2039.  
  2040.  move.w (a0)+,d0
  2041.  bge.s .notignoreleft
  2042.  bra .leftnotoktoclip
  2043. .notignoreleft:
  2044.  
  2045.  move.w 6(a2,d0*8),d3    ; left z val
  2046.  bgt.s .leftclipinfront
  2047.  
  2048.  move.w (a0),d0
  2049.  blt.s .ignoreboth
  2050.  tst.w 6(a2,d0*8)
  2051.  bgt.s .leftnotoktoclip
  2052. .ignoreboth
  2053.  move.w #96,rightclip
  2054.  move.w #0,leftclip
  2055.  addq #2,a0
  2056.  rts
  2057.  
  2058. .leftclipinfront:
  2059.  move.w (a1,d0*2),d1    ; left x on screen
  2060.  cmp.w leftclip(pc),d1
  2061.  ble.s .leftnotoktoclip
  2062.  move.w d1,leftclip
  2063. .leftnotoktoclip:
  2064.  
  2065.  move.w (a0)+,d0
  2066.  bge.s .notignoreright
  2067.  move.w #0,d4
  2068.  bra .rightnotoktoclip
  2069. .notignoreright:
  2070.  move.w 6(a2,d0*8),d4    ; right z val
  2071.  ble.s .rightnotoktoclip
  2072.  
  2073. .rightclipinfront:
  2074.  move.w (a1,d0*2),d1    ; right x on screen
  2075.  cmp.w rightclip(pc),d1
  2076.  bge.s .rightnotoktoclip
  2077.  addq #1,d1
  2078.  move.w d1,rightclip
  2079. .rightnotoktoclip:
  2080.  
  2081. ; move.w leftclip,d0
  2082. ; move.w rightclip,d1
  2083. ; cmp.w d0,d1
  2084. ; bge.s .noswap
  2085. ; move.w #96,rightclip
  2086. ; move.w #0,leftclip
  2087. ;.noswap:
  2088.  
  2089.  rts
  2090.  
  2091.  
  2092. leftclip2: dc.w 0
  2093. rightclip2: dc.w 0
  2094. ZoneBright: dc.w 0
  2095.  
  2096. npolys: dc.w 0
  2097.  
  2098. PLR1_fire: dc.b 0
  2099. PLR2_fire: dc.b 0
  2100.  
  2101. turnleftright:
  2102.  
  2103.  move.w PLR2_angspd,d1
  2104.  move.w PLR2_angpos,d0
  2105.  
  2106.  move.w #120,d7
  2107.  muls TempFrames,d7
  2108.  
  2109.  move.w d1,d2
  2110.  neg.w d2
  2111.  cmp.w d7,d2
  2112.  ble.s okslow
  2113.  move.w d7,d2
  2114. okslow
  2115.  neg.w d7
  2116.  cmp.w d7,d2
  2117.  bge.s okslo
  2118.  move.w d7,d2
  2119. okslo:
  2120.  
  2121.  asr.w #1,d7
  2122.  
  2123.  btst #1,$d(a6)
  2124.  sne d3
  2125.  beq.s notleft
  2126.  move.w d7,d2
  2127.  neg.w d2
  2128. ; tst.w d1
  2129. ; bge.s notleft
  2130. ; moveq #0,d1
  2131. notleft
  2132.  
  2133.  btst #1,$c(a6)
  2134.  sne d4
  2135.  beq.s notright
  2136.  move.w d7,d2
  2137. ; tst.w d1
  2138. ; ble.s notright
  2139. ; moveq #0,d1
  2140. notright
  2141.  
  2142.  move.w #0,PLR2_ForwardSpd
  2143.  
  2144.  btst #0,$dff00c
  2145.  sne d5
  2146.  eor.b d4,d5
  2147.  beq.s notup
  2148.  move.w TempFrames,d7
  2149.  neg.w d7
  2150.  asl.w #2,d7
  2151.  move.w d7,PLR2_ForwardSpd
  2152. notup:
  2153.  
  2154.  btst #0,$dff00d
  2155.  sne d5
  2156.  eor.b d3,d5
  2157.  beq.s notdown
  2158.  move.w TempFrames,d7
  2159.  asl.w #2,d7
  2160.  move.w d7,PLR2_ForwardSpd
  2161. notdown:
  2162.  
  2163.  add.w d2,d1
  2164.  cmp.w #-360,d1
  2165.  bge.s okspdlft
  2166.  move.w #-360,d1
  2167. okspdlft:
  2168.  cmp.w #360,d1
  2169.  ble.s okspdrgt
  2170.  move.w #360,d1
  2171. okspdrgt:
  2172.  
  2173.  move.w d1,PLR2_angspd
  2174.  add.w d1,d0
  2175.  and.w #8191,d0
  2176.  move.w d0,PLR2_angpos
  2177.  rts
  2178.  
  2179. *****************************************************
  2180.  
  2181.  include "ab3:source/ObjectMove"
  2182.  
  2183. pastdata:
  2184. ***********************************
  2185. * This routine animates brightnesses.
  2186.  
  2187.  
  2188. liftpt: dc.l liftanimtab
  2189.  
  2190. brightpt:
  2191.  dc.l brightanimtab
  2192.  
  2193. liftanim:
  2194.  rts
  2195.  
  2196. ******************************
  2197.  include "ab3:source/Anims"
  2198. ******************************
  2199.  
  2200. rotanimpt: dc.w 0
  2201. xradd: dc.w 5
  2202. yradd: dc.w 8
  2203. xrpos: dc.w 320
  2204. yrpos: dc.w 320
  2205.  
  2206. rotanim:
  2207.  rts
  2208.  
  2209. option:
  2210.  dc.l 0
  2211.  
  2212. ********** WALL STUFF *******************************
  2213.  
  2214.  include "AB3:source/wallroutine3.chipmem"
  2215.  
  2216. *****************************************************
  2217.  
  2218. ******************************************
  2219. * floor polygon
  2220.  
  2221. numsidestd: dc.w 0
  2222. bottomline: dc.w 0
  2223.  
  2224. NewCornerBuff:
  2225.  ds.l 100
  2226.  
  2227. itsafloordraw:
  2228.  
  2229. * If D0 =1 then its a floor otherwise (=2) it's
  2230. * a roof.
  2231.  
  2232.  move.w #0,above
  2233.  move.w (a0)+,d6    ; ypos of poly
  2234.  
  2235.  move.w leftclip(pc),d7
  2236.  cmp.w rightclip(pc),d7
  2237.  bge.s dontdrawreturn
  2238.  
  2239.  move.w botclip,d7
  2240.  sub.w #40,d7
  2241.  ble.s dontdrawreturn
  2242.  sub.w flooryoff,d6
  2243.  bgt.s below
  2244.  blt.s aboveplayer
  2245. dontdrawreturn:
  2246.  move.w (a0)+,d6    ; sides-1
  2247.  add.w d6,d6
  2248.  add.w d6,a0
  2249.  add.w #4+6,a0
  2250.  rts
  2251. aboveplayer:
  2252.  cmp.w #2,d0
  2253.  bne.s dontdrawreturn
  2254.  move.w #40,d7
  2255.  sub.w topclip,d7 
  2256.  blt.s dontdrawreturn
  2257.  move.w #1,d0
  2258.  move.w d0,above
  2259.  neg.w d6
  2260. below:
  2261.  cmp.w #1,d0
  2262.  bne.s dontdrawreturn
  2263.  move.w d6,distaddr
  2264.  muls #64,d6
  2265.  move.l d6,ypos
  2266.  divs d7,d6        ; zpos of bottom
  2267.             ; visible line
  2268.  move.w d6,minz
  2269.  move.w d7,bottomline
  2270.  
  2271. ; Go round each point finding out
  2272. ; if it should be visible or not.
  2273.  
  2274.  move.l a0,-(a7)
  2275.  
  2276.  move.w (a0)+,d7    ; number of sides
  2277.  move.l #Rotated,a1
  2278.  move.l #OnScreen,a2
  2279.  move.l #NewCornerBuff,a3
  2280.  moveq #0,d4
  2281.  moveq #0,d5
  2282.  moveq #0,d6
  2283.  clr.b anyclipping
  2284.  
  2285. cornerprocessloop:
  2286.  
  2287.  move.w (a0)+,d0
  2288.  move.w 6(a1,d0.w*8),d1
  2289.  ble  .canttell
  2290.  
  2291.  move.w (a2,d0.w*2),d3
  2292.  cmp.w leftclip,d3
  2293.  bgt.s .nol
  2294.  st d4
  2295.  st anyclipping
  2296.  bra.s .nos
  2297. .nol:
  2298.  cmp.w rightclip,d3
  2299.  blt.s .nor
  2300.  st d6
  2301.  st anyclipping
  2302.  bra.s .nos
  2303. .nor:
  2304.  st d5
  2305. .nos:
  2306.  bra .cantell
  2307.  
  2308. .canttell:
  2309.  st d5
  2310.  st anyclipping
  2311.  
  2312. .cantell:
  2313.  
  2314.  
  2315.  dbra d7,cornerprocessloop
  2316.  
  2317.  move.l (a7)+,a0
  2318.  tst.b d5
  2319.  bne.s somefloortodraw
  2320.  eor.b d4,d6
  2321.  bne dontdrawreturn
  2322.  
  2323. somefloortodraw:
  2324.  
  2325.  move.w #80,top
  2326.  move.w #-1,bottom
  2327.  move.w #0,drawit
  2328.  move.l #Rotated,a1
  2329.  move.l #OnScreen,a2
  2330.  move.w (a0)+,d7    ; no of sides
  2331. sideloop:
  2332.  move.w minz,d6
  2333.  move.w (a0)+,d1
  2334.  move.w (a0),d3
  2335.  move.w 6(a1,d1*8),d4    ;first z
  2336.  cmp.w d6,d4
  2337.  bgt firstinfront
  2338.  move.w 6(a1,d3*8),d5    ; sec z
  2339.  cmp.w d6,d5
  2340.  ble bothbehind
  2341. ** line must be on left and partially behind.
  2342.  sub.w d5,d4
  2343.  move.l (a1,d1*8),d0
  2344.  sub.l (a1,d3*8),d0
  2345.  asr.l #7,d0
  2346.  sub.w d5,d6
  2347.  muls d6,d0    ; new x coord
  2348.  divs d4,d0
  2349.  ext.l d0
  2350.  asl.l #7,d0
  2351.  
  2352.  add.l (a1,d3*8),d0
  2353.  move.w minz,d4
  2354.  move.w (a2,d3*2),d2
  2355.  divs d4,d0
  2356.  add.w #47,d0
  2357.  move.l ypos,d3
  2358.  divs d5,d3
  2359.  move.w bottomline,d1 
  2360.  bra lineclipped
  2361.  
  2362. firstinfront:
  2363.  move.w 6(a1,d3*8),d5    ; sec z
  2364.  cmp.w d6,d5
  2365.  bgt bothinfront
  2366. ** line must be on right and partially behind.
  2367.  sub.w d4,d5    ; dz
  2368.  move.l (a1,d3*8),d2
  2369.  sub.l (a1,d1*8),d2    ; dx
  2370.  sub.w d4,d6
  2371.  asr.l #7,d2
  2372.  muls d6,d2    ; new x coord
  2373.  divs d5,d2
  2374.  ext.l d2
  2375.  asl.l #7,d2
  2376.  add.l (a1,d1*8),d2
  2377.  move.w minz,d5
  2378.  move.w (a2,d1*2),d0
  2379.  divs d5,d2
  2380.  add.w #47,d2
  2381.  move.l ypos,d1
  2382.  divs d4,d1
  2383.  move.w bottomline,d3 
  2384.  bra lineclipped
  2385.  
  2386. bothinfront:
  2387.  
  2388. * Also, usefully enough, both are on-screen
  2389. * so no bottom clipping is needed.
  2390.  
  2391.  move.w (a2,d1*2),d0    ; first x
  2392.  move.w (a2,d3*2),d2    ; second x
  2393.  move.l ypos,d1
  2394.  move.l d1,d3
  2395.  divs d4,d1        ; first y
  2396.  divs d5,d3        ; second y
  2397. lineclipped:
  2398.  move.l #rightsidetab,a3
  2399.  cmp.w d1,d3
  2400.  beq lineflat
  2401.  st drawit
  2402.  bgt lineonright
  2403.  move.l #leftsidetab,a3
  2404.  exg d1,d3
  2405.  exg d0,d2
  2406.  
  2407.  lea (a3,d1*2),a3
  2408.  
  2409.  cmp.w top(pc),d1
  2410.  bge.s .nonewtop
  2411.  move.w d1,top
  2412. .nonewtop:
  2413.  cmp.w bottom(pc),d3
  2414.  ble.s .nonewbot
  2415.  move.w d3,bottom
  2416. .nonewbot:
  2417.  
  2418.  sub.w d1,d3    ; dy
  2419.  sub.w d0,d2    ; dx
  2420.  
  2421.  blt .linegoingleft
  2422.  sub.w #1,d0
  2423.  
  2424.  ext.l d2
  2425.  divs d3,d2
  2426.  move.w d2,d6
  2427.  swap d2
  2428.  
  2429. ; moveq #0,d6
  2430. ; sub.w d3,d2
  2431. ; blt.s .noco
  2432. ;.makeco
  2433. ; addq #1,d6
  2434. ; sub.w d3,d2
  2435. ; bge.s .makeco
  2436. ;.noco
  2437. ; add.w d3,d2
  2438.  
  2439.  move.w d3,d4
  2440.  move.w d3,d5
  2441.  subq #1,d5
  2442.  move.w d6,d1
  2443.  addq #1,d1
  2444.  
  2445. .pixlopright:
  2446.  move.w d0,(a3)+
  2447.  sub.w d2,d4
  2448.  bge.s .nobigstep
  2449.  add.w d1,d0
  2450.  add.w d3,d4
  2451.  dbra d5,.pixlopright
  2452.  bra lineflat
  2453. .nobigstep
  2454.  add.w d6,d0
  2455.  dbra d5,.pixlopright
  2456.  bra lineflat
  2457.  
  2458. .linegoingleft:
  2459.  
  2460.  sub.w #1,d0
  2461.  
  2462.  neg.w d2
  2463.  
  2464.  ext.l d2
  2465.  divs d3,d2
  2466.  move.w d2,d6
  2467.  swap d2
  2468.  
  2469.  
  2470. ; moveq #0,d6
  2471. ; sub.w d3,d2
  2472. ; blt.s .nocol
  2473. ;.makecol
  2474. ; addq #1,d6
  2475. ; sub.w d3,d2
  2476. ; bge.s .makecol
  2477. ;.nocol
  2478. ; add.w d3,d2
  2479.  
  2480.  
  2481.  
  2482.  move.w d3,d4
  2483.  move.w d3,d5
  2484.  subq #1,d5
  2485.  
  2486.  move.w d6,d1
  2487.  addq #1,d1
  2488.  
  2489. .pixlopleft:
  2490.  sub.w d2,d4
  2491.  bge.s .nobigstepl
  2492.  sub.w d1,d0
  2493.  add.w d3,d4
  2494.  move.w d0,(a3)+
  2495.  dbra d5,.pixlopleft
  2496.  bra lineflat
  2497.  
  2498. .nobigstepl
  2499.  sub.w d6,d0
  2500.  move.w d0,(a3)+
  2501.  dbra d5,.pixlopleft
  2502.  bra lineflat
  2503.  
  2504. lineonright:
  2505.  
  2506.  lea (a3,d1*2),a3
  2507.  
  2508.  cmp.w top(pc),d1
  2509.  bge.s .nonewtop
  2510.  move.w d1,top
  2511. .nonewtop:
  2512.  cmp.w bottom(pc),d3
  2513.  ble.s .nonewbot
  2514.  move.w d3,bottom
  2515. .nonewbot:
  2516.  
  2517.  sub.w d1,d3    ; dy
  2518.  sub.w d0,d2    ; dx
  2519.  blt .linegoingleft
  2520. ; addq #1,d0
  2521.  ext.l d2
  2522.  divs d3,d2
  2523.  move.w d2,d6
  2524.  swap d2
  2525.  
  2526. ; moveq #0,d6
  2527. ; sub.w d3,d2
  2528. ; blt.s .noco
  2529. ;.makeco
  2530. ; addq #1,d6
  2531. ; sub.w d3,d2
  2532. ; bge.s .makeco
  2533. ;.noco
  2534. ; add.w d3,d2
  2535.  
  2536.  move.w d3,d4
  2537.  move.w d3,d5
  2538.  subq #1,d5
  2539.  move.w d6,d1
  2540.  addq #1,d1
  2541.  
  2542. .pixlopright:
  2543.  sub.w d2,d4
  2544.  bge.s .nobigstep
  2545.  add.w d1,d0
  2546.  add.w d3,d4
  2547.  move.w d0,(a3)+
  2548.  dbra d5,.pixlopright
  2549.  bra lineflat
  2550.  
  2551. .nobigstep
  2552.  add.w d6,d0
  2553.  move.w d0,(a3)+
  2554.  dbra d5,.pixlopright
  2555.  bra lineflat
  2556.  
  2557. .linegoingleft:
  2558. ; addq #1,d0
  2559.  neg.w d2
  2560.  
  2561.  ext.l d2
  2562.  divs d3,d2
  2563.  move.w d2,d6
  2564.  swap d2
  2565.  
  2566.  
  2567. ; moveq #0,d6
  2568. ; sub.w d3,d2
  2569. ; blt.s .nocol
  2570. ;.makecol
  2571. ; addq #1,d6
  2572. ; sub.w d3,d2
  2573. ; bge.s .makecol
  2574. ;.nocol
  2575. ; add.w d3,d2
  2576.  
  2577.  move.w d3,d4
  2578.  move.w d3,d5
  2579.  subq #1,d5
  2580.  move.w d6,d1
  2581.  addq #1,d1
  2582.  
  2583. .pixlopleft:
  2584.  move.w d0,(a3)+
  2585.  sub.w d2,d4
  2586.  bge.s .nobigstepl
  2587.  sub.w d1,d0
  2588.  add.w d3,d4
  2589.  dbra d5,.pixlopleft
  2590.  bra lineflat
  2591.  
  2592. .nobigstepl
  2593.  sub.w d6,d0
  2594.  dbra d5,.pixlopleft
  2595.  
  2596. lineflat:
  2597.  
  2598. bothbehind:
  2599.  dbra d7,sideloop
  2600.  
  2601. pastsides:
  2602.  
  2603.  
  2604.  addq #2,a0
  2605.  
  2606.  move.w #104*4,linedir
  2607.  move.l frompt,a6
  2608.  add.l #104*4*41,a6
  2609.  move.w (a0)+,scaleval
  2610.  move.w (a0)+,whichtile
  2611.  move.w (a0)+,d6
  2612.  add.w ZoneBright,d6
  2613.  move.w d6,lighttype
  2614.  move.w above(pc),d6
  2615.  beq groundfloor
  2616. * on ceiling:
  2617.  move.w #-104*4,linedir
  2618.  suba.w #104*4,a6
  2619. groundfloor:
  2620.  
  2621.  move.w xoff,d6
  2622.  move.w zoff,d7
  2623.  add.w xwobxoff,d7
  2624.  add.w xwobzoff,d6
  2625.  move.w scaleval,d3
  2626.  move.l scaleprogfrom(pc,d3.w*4),scaleprog
  2627.  tst.w d3
  2628.  beq.s .samescale
  2629.  bgt.s .scaledown
  2630.  neg.w d3
  2631.  asr.l d3,d7
  2632.  asr.l d3,d6
  2633.  bra.s .samescale
  2634. .scaledown:
  2635.  asl.l d3,d6
  2636.  asl.l d3,d7
  2637. .samescale
  2638.  asl.w #8,d7
  2639.  move.w d6,sxoff
  2640.  move.w d7,szoff
  2641.  bra pastscale 
  2642.  
  2643.  asr.l #3,d1
  2644.  asr.l #3,d2
  2645.  asr.l #2,d1
  2646.  asr.l #2,d2
  2647.  asr.l #1,d1
  2648.  asr.l #1,d2
  2649. scaleprogfrom
  2650.  nop
  2651.  nop
  2652.  asl.l #1,d1
  2653.  asl.l #1,d2
  2654.  asl.l #2,d1
  2655.  asl.l #2,d2
  2656.  asl.l #3,d1
  2657.  asl.l #3,d2
  2658.  
  2659. top: dc.w 0
  2660. bottom: dc.w 0
  2661. ypos: dc.l 0
  2662. nfloors: dc.w 0
  2663. lighttype: dc.w 0
  2664. above: dc.w 0 
  2665. linedir: dc.w 0
  2666. distaddr: dc.w 0
  2667.  
  2668. minz: dc.w 0
  2669. leftsidetab:
  2670.  ds.w 80
  2671. rightsidetab:
  2672.  ds.w 80
  2673. leftsideclip:
  2674.  ds.w 80
  2675. rightsideclip:
  2676.  ds.w 80
  2677.  
  2678. movespd: dc.w 0
  2679. largespd: dc.l 0
  2680.  
  2681. pastscale:
  2682.  
  2683.  tst.b drawit(pc)
  2684.  beq dontdrawfloor
  2685.  
  2686.  move.l a0,-(a7)
  2687.  
  2688.  move.l #leftsidetab,a4
  2689.  move.w top(pc),d1
  2690.  move.w bottom(pc),d7
  2691.  tst.w above
  2692.  beq.s clipfloor
  2693.  
  2694.  move.w #40,d3
  2695.  move.w d3,d4
  2696.  sub.w topclip,d3
  2697.  sub.w botclip,d4
  2698.  cmp.w d3,d1
  2699.  bge predontdrawfloor
  2700.  cmp.w d4,d7
  2701.  blt predontdrawfloor
  2702.  cmp.w d4,d1
  2703.  bge.s .nocliptoproof
  2704.  move.w d4,d1
  2705. .nocliptoproof
  2706.  cmp.w d3,d7
  2707.  blt doneclip
  2708.  move.w d3,d7
  2709.  bra doneclip
  2710.  
  2711. clipfloor:
  2712.  move.w botclip,d4
  2713.  sub.w #40,d4
  2714.  cmp.w d4,d1
  2715.  bge predontdrawfloor
  2716.  move.w topclip,d3
  2717.  sub.w #40,d3
  2718.  cmp.w d3,d1
  2719.  bge.s .nocliptopfloor
  2720.  move.w d3,d1
  2721. .nocliptopfloor 
  2722.  cmp.w d3,d7
  2723.  ble predontdrawfloor
  2724.  cmp.w d4,d7
  2725.  blt.s .noclipbotfloor
  2726.  move.w d4,d7
  2727. .noclipbotfloor:
  2728.  
  2729. doneclip:
  2730.  
  2731.  lea (a4,d1*2),a4
  2732. ; move.l #dists,a2
  2733.  move.w distaddr,d0
  2734.  muls #64,d0
  2735.  move.l d0,a2
  2736. ; muls #25,d0
  2737. ; adda.w d0,a2
  2738. ; lea (a2,d1*2),a2
  2739.  sub.w d1,d7
  2740.  ble predontdrawfloor 
  2741.  move.w d1,d0
  2742.  bne.s .notzero
  2743.  moveq #1,d0
  2744. .notzero
  2745.  muls linedir,d1
  2746.  add.l d1,a6
  2747.  move.l #floorscalecols,a1
  2748.  move.l LineToUse,a5
  2749.  
  2750.  tst.b anyclipping
  2751.  beq dofloornoclip
  2752.  
  2753. dofloor:
  2754. ; move.w (a2)+,d0
  2755.  move.w leftclip(pc),d3
  2756.  move.w rightclip(pc),d4
  2757.  move.w rightsidetab-leftsidetab(a4),d2
  2758.  addq #1,d2
  2759.  cmp.w d3,d2
  2760.  ble.s nodrawline
  2761.  cmp.w d4,d2
  2762.  ble.s noclipright
  2763.  move.w d4,d2
  2764. noclipright:
  2765.  move.w (a4),d1
  2766.  cmp.w d4,d1
  2767.  bge.s nodrawline
  2768.  cmp.w d3,d1
  2769.  bge.s noclipleft
  2770.  move.w d3,d1
  2771. noclipleft:
  2772.  cmp.w d1,d2
  2773.  ble.s nodrawline
  2774.  
  2775.  move.w d1,leftedge
  2776.  move.w d2,rightedge
  2777.  
  2778.  move.l a6,a3
  2779.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  2780.  move.l a2,d7
  2781.  divs d0,d7
  2782.  move.w d7,d0
  2783.  jsr (a5)
  2784.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  2785. nodrawline
  2786.  adda.w linedir(pc),a6
  2787.  addq #2,a4
  2788.  addq #1,d0
  2789.  subq #1,d7
  2790.  bgt dofloor
  2791.  
  2792. predontdrawfloor
  2793.  move.l (a7)+,a0
  2794.  
  2795. dontdrawfloor:
  2796.  
  2797.  CACHE_FREEZE_OFF d2
  2798.  rts
  2799.  
  2800. anyclipping: dc.w 0
  2801.  
  2802. dofloornoclip:
  2803. ; move.w (a2)+,d0
  2804.  move.w rightsidetab-leftsidetab(a4),d2
  2805.  addq #1,d2
  2806.  move.w (a4)+,leftedge
  2807.  move.w d2,rightedge
  2808.  
  2809.  move.l a6,a3
  2810.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  2811.  move.l a2,d7
  2812.  divs d0,d7
  2813.  move.w d7,d0
  2814.  jsr (a5)
  2815.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  2816.  adda.w linedir(pc),a6
  2817.  addq #1,d0
  2818.  subq #1,d7
  2819.  bgt dofloornoclip
  2820.  
  2821.  bra predontdrawfloor
  2822.  
  2823.  
  2824. dists:
  2825. ; incbin "floordists"
  2826. drawit: dc.w 0
  2827.  
  2828. LineToUse: dc.l 0
  2829.  
  2830. ***************************
  2831. * Right then, time for the floor
  2832. * routine...
  2833. * For test purposes, give it
  2834. * a3 = point to screen
  2835. * d0= z distance away
  2836. * and sinval+cosval must be set up.
  2837. ***************************
  2838.  
  2839. leftedge: dc.w 0
  2840. rightedge: dc.w 0
  2841.  
  2842. rndpt: dc.l rndtab
  2843.  
  2844. WaterFloorLine:
  2845.  
  2846.  CACHE_OFF d2
  2847.  
  2848.  move.l rndpt,a2
  2849.  move.w (a2)+,d1
  2850.  move.w (a2)+,d2
  2851.  move.w (a2)+,d3
  2852.  cmp.l #endrnd-4,a2
  2853.  blt.s okrnd
  2854.  suba.w #98,a2
  2855. okrnd: 
  2856.  move.l a2,rndpt
  2857.  
  2858.  asr.w #6,d0
  2859.  move.w d0,d1
  2860.  move.w d0,d2
  2861.  move.w d0,d3
  2862.  move.l clipd(pc,d1.w*4),d1
  2863.  move.l clipd(pc,d2.w*4),d2
  2864.  move.l clipd(pc,d3.w*4),d3
  2865.  bra pcli
  2866.  
  2867.  dc.l 0
  2868. clipd:
  2869.  dc.l 0
  2870.  dc.l 512
  2871.  dc.l 512*2
  2872.  dc.l 512*3
  2873.  dc.l 512*4
  2874.  dc.l 512*5
  2875.  dc.l 512*6
  2876.  dc.l 512*7
  2877.  dc.l 512*8
  2878.  dc.l 512*9
  2879.  dc.l 512*10
  2880.  dc.l 512*11
  2881.  dc.l 512*12
  2882.  dc.l 512*13
  2883.  dc.l 512*14
  2884.  dc.l 512*15
  2885.  dc.l 512*15
  2886.  dc.l 512*15
  2887.  dc.l 512*15
  2888.  dc.l 512*15
  2889.  dc.l 512*15
  2890.  dc.l 512*15
  2891.  dc.l 512*15
  2892.  dc.l 512*15
  2893.  dc.l 512*15
  2894.  dc.l 512*15
  2895.  dc.l 512*15
  2896.  
  2897. pcli:
  2898.  
  2899.  move.l #brightentab,a2
  2900.  move.l a2,a4
  2901.  move.l a4,a5
  2902.  add.l d1,a2
  2903.  add.l d2,a4
  2904.  add.l d3,a5
  2905.  
  2906.  move.l #doacrossline,a1
  2907.  move.w leftedge(pc),d1
  2908.  move.w rightedge(pc),d2
  2909.  sub.w d1,d2
  2910.  move.w time(pc,d1.w*2),d1
  2911.  move.w time(pc,d2.w*2),d2
  2912.  lea (a1,d1.w),a1
  2913.  move.w (a1,d2.w),d4
  2914.  move.w #$4e75,(a1,d2.w)
  2915.  
  2916.  moveq #0,d0
  2917.  jsr (a1)
  2918.  move.w d4,(a1,d2.w)
  2919.  
  2920.  CACHE_ON d2
  2921.  
  2922.  rts
  2923.  
  2924. time:
  2925. val SET 0
  2926.  REPT 100
  2927.  dc.w val
  2928. val SET val+10
  2929.  ENDR
  2930.  
  2931. storeit: dc.l 0
  2932.  
  2933. doacrossline:
  2934.  incbin "Doacrossline"
  2935.  rts
  2936.  
  2937. dst: dc.w 0
  2938.  
  2939. FloorLine:
  2940.  
  2941.  move.l #floortile,a0
  2942.  adda.w whichtile,a0
  2943.  move.w lighttype,d1
  2944.  
  2945.  move.w d0,dst
  2946.  
  2947.  move.w d0,d2
  2948. *********************
  2949. * Old version
  2950.  asr.w #6,d2
  2951.  add.w #5,d1
  2952. *********************
  2953. ; asr.w #3,d2
  2954. ; sub.w #4,d2
  2955. ; cmp.w #6,d2
  2956. ; blt.s flbrbr
  2957. ; move.w #6,d2
  2958. ;flbrbr:
  2959. *********************
  2960.  add.w d2,d1
  2961.  bge.s .fixedbright
  2962.  moveq #0,d1
  2963. .fixedbright:
  2964.  cmp.w #28,d1
  2965.  ble.s .smallbright
  2966.  move.w #28,d1
  2967. .smallbright:
  2968.  lea floorscalecols,a1
  2969.  add.l floorbright(pc,d1.w*4),a1
  2970.  bra pastfloorbright
  2971.  
  2972. ConstCol: dc.w 0
  2973.  
  2974. BumpLine:
  2975.  
  2976.  tst.b smoothbumps
  2977.  beq.s Chunky
  2978.  
  2979.  move.l #SmoothTile,a0
  2980.  lea Smoothscalecols,a1
  2981.  bra pastast
  2982.  
  2983. Chunky:
  2984.  
  2985.  moveq #0,d2
  2986.  move.l #Bumptile,a0
  2987.  move.w whichtile,d2
  2988.  adda.w d2,a0
  2989.  ror.l #2,d2
  2990.  lsr.w #6,d2
  2991.  rol.l #2,d2
  2992.  and.w #15,d2
  2993.  move.l #ConstCols,a1
  2994.  move.w (a1,d2.w*2),ConstCol
  2995.  lea Bumpscalecols,a1
  2996.  
  2997. pastast:
  2998.  move.w lighttype,d1
  2999.  
  3000.  move.w d0,dst
  3001.  
  3002.  move.w d0,d2
  3003. *********************
  3004. * Old version
  3005.  asr.w #6,d2
  3006.  add.w #5,d1
  3007. *********************
  3008. ; asr.w #3,d2
  3009. ; sub.w #4,d2
  3010. ; cmp.w #6,d2
  3011. ; blt.s flbrbr
  3012. ; move.w #6,d2
  3013. ;flbrbr:
  3014. *********************
  3015.  add.w d2,d1
  3016.  bge.s .fixedbright
  3017.  moveq #0,d1
  3018. .fixedbright:
  3019.  cmp.w #28,d1
  3020.  ble.s .smallbright
  3021.  move.w #28,d1
  3022. .smallbright:
  3023.  add.l floorbright(pc,d1.w*4),a1
  3024.  bra pastfloorbright
  3025.  
  3026.  
  3027. floorbright:
  3028.  dc.l 512*0
  3029.  dc.l 512*1
  3030.  dc.l 512*1
  3031.  dc.l 512*2
  3032.  dc.l 512*2
  3033.  
  3034.  dc.l 512*3
  3035.  dc.l 512*3
  3036.  dc.l 512*4
  3037.  dc.l 512*4
  3038.  dc.l 512*5
  3039.  
  3040.  dc.l 512*5
  3041.  dc.l 512*6
  3042.  dc.l 512*6
  3043.  dc.l 512*7
  3044.  dc.l 512*7
  3045.  
  3046.  dc.l 512*8
  3047.  dc.l 512*8
  3048.  dc.l 512*9
  3049.  dc.l 512*9
  3050.  dc.l 512*10
  3051.  
  3052.  dc.l 512*10
  3053.  dc.l 512*11
  3054.  dc.l 512*11
  3055.  dc.l 512*12
  3056.  dc.l 512*12
  3057.  
  3058.  dc.l 512*13
  3059.  dc.l 512*13
  3060.  dc.l 512*14
  3061.  dc.l 512*14
  3062.  
  3063. widthleft: dc.w 0
  3064. scaleval: dc.w 0
  3065. sxoff: dc.w 0
  3066. szoff: dc.w 0
  3067. xoff34: dc.w 0
  3068. zoff34: dc.w 0
  3069. scosval: dc.w 0
  3070. ssinval: dc.w 0
  3071.  
  3072.  
  3073. floorsetbright:
  3074.  move.l #walltiles,a0
  3075.  
  3076. pastfloorbright
  3077.  
  3078.  
  3079.  move.w d0,d1
  3080.  muls cosval,d1    ; change in x across whole width
  3081.  move.w d0,d2
  3082.  muls sinval,d2    ; change in z across whole width
  3083.  neg.l d2
  3084. scaleprog:
  3085.  asr.l #1,d1
  3086.  asr.l #1,d2
  3087.  
  3088.  move.l d1,d3 ;    z cos
  3089.  move.l d3,d6
  3090.  move.l d3,d5
  3091.  asr.l #1,d6
  3092.  add.l d6,d3
  3093.  asr.l #1,d3
  3094.  
  3095.  move.l d2,d4    ; z sin
  3096.  move.l d4,d6
  3097.  asr.l #1,d6
  3098.  add.l d4,d6
  3099.  add.l d3,d4
  3100.  neg.l d4    ; start x
  3101.  
  3102.  asr.l #1,d6    ; zsin/2
  3103.  sub.l d6,d5    ; start z
  3104.  
  3105.  move.w d4,startsmoothx
  3106.  move.w d5,startsmoothz
  3107.  
  3108.  swap d4
  3109.  asr.l #8,d5
  3110.  add.w szoff,d5
  3111.  add.w sxoff,d4
  3112.  and.w #63,d4
  3113.  and.w #63*256,d5
  3114.  move.b d4,d5
  3115.  
  3116.  asr.l #6,d1
  3117.  asr.l #6,d2
  3118.  move.w leftedge(pc),d6
  3119.  beq.s nomultleft
  3120.  
  3121.  move.l d1,d3
  3122.  asr.l #6,d3
  3123.  muls d6,d3
  3124.  asl.l #6,d3
  3125.  swap d3
  3126.  add.b d3,d5
  3127.  
  3128.  move.l d2,d3
  3129.  asr.l #6,d3
  3130.  muls d6,d3
  3131.  asl.l #6,d3
  3132.  swap d3
  3133.  lsl.w #8,d3
  3134.  add.w d3,d5
  3135.  
  3136. nomultleft:
  3137.  
  3138.  move.w d1,a4
  3139.  move.w d2,a5
  3140.  asr.l #8,d2
  3141.  and.w #%0011111100000000,d2
  3142.  swap d1
  3143.  add.w d1,d2
  3144.  move.w #%11111100111111,d1
  3145.  and.w d1,d5
  3146.  swap d5
  3147.  move.w startsmoothz,d5
  3148.  swap d5
  3149.  swap d2
  3150.  move.w a5,d2
  3151.  swap d2
  3152.  
  3153. ***********************************
  3154.  
  3155.  move.w d6,a2
  3156.  move.l d2,d6
  3157.  add.w #256,d6
  3158.  
  3159.  moveq #0,d0
  3160.  
  3161.  tst.w a2
  3162.  beq startatleftedge
  3163.  
  3164.  move.w widthleft(pc),d4
  3165.  
  3166.  move.w rightedge(pc),d3
  3167.  
  3168.  cmp.w #31,a2
  3169.  bgt.s notinfirststrip
  3170.  lea (a3,a2.w*4),a3
  3171.  cmp.w #32,d3
  3172.  ble.s allinfirststrip
  3173.  move.w #32,d7
  3174.  sub.w d7,d3
  3175.  sub.w a2,d7
  3176.  bra intofirststrip
  3177.  
  3178. allinfirststrip
  3179.  sub.w a2,d3
  3180.  move.w d3,d7
  3181.  move.w #0,d4
  3182.  bra allintofirst
  3183.  
  3184. notinfirststrip:
  3185.  sub.w #32,a2
  3186.  sub.w #32,d3
  3187.  adda.w #33*4,a3
  3188.  cmp.w #31,a2
  3189.  bgt.s notstartinsec
  3190.  lea (a3,a2.w*4),a3
  3191.  cmp.w #32,d3
  3192.  ble.s allinsecstrip
  3193.  move.w #32,d7
  3194.  sub.w d7,d3
  3195.  sub.w a2,d7
  3196.  move.w d3,d4
  3197.  bra tstwat
  3198.  
  3199. allinsecstrip
  3200.  sub.w a2,d3
  3201.  move.w d3,d7
  3202.  move.w #0,d4
  3203.  bra tstwat
  3204.  rts
  3205.  
  3206. notstartinsec:
  3207.  sub.w #32,a2
  3208.  sub.w #32,d3
  3209.  adda.w #33*4,a3
  3210.  lea (a3,a2.w*4),a3
  3211.  cmp.w #32,d3
  3212.  ble.s allinthirdstrip
  3213.  move.w #32,d7
  3214.  sub.w d7,d3
  3215.  sub.w a2,d7
  3216.  move.w d3,d4
  3217.  bra tstwat
  3218.  rts
  3219.  
  3220. allinthirdstrip
  3221.  sub.w a2,d3
  3222.  move.w d3,d7
  3223.  move.w #0,d4
  3224.  bra tstwat
  3225.  rts
  3226.  
  3227. startatleftedge:
  3228.  
  3229.  move.w rightedge(pc),d3
  3230.  sub.w a2,d3
  3231.  
  3232.  move.w d3,d7
  3233.  cmp.w #32,d7
  3234.  ble.s .notoowide
  3235.  move.w #32,d7
  3236. .notoowide:
  3237.  sub.w d7,d3
  3238. intofirststrip:
  3239.  
  3240.  move.w d3,d4
  3241. allintofirst:
  3242.  
  3243.  move.w startsmoothx,d3
  3244.  
  3245. tstwat:
  3246.  
  3247.  tst.b usewater
  3248.  bne texturedwater
  3249.  
  3250.  
  3251. ******************************
  3252. * BumpMap the floor/ceiling! *
  3253.  tst.b usebumps
  3254.  bne.s BumpMap
  3255. ******************************
  3256.  
  3257. ordinary:
  3258.  moveq #0,d0
  3259.  
  3260.  dbra d7,acrossscrn
  3261.  rts
  3262.  
  3263. usebumps: dc.w $0
  3264. smoothbumps: dc.w $0
  3265.  
  3266.  include "ab3:source/bumpmap.s"
  3267.  
  3268.  CNOP 0,4
  3269. backbefore:
  3270.  and.w d1,d5
  3271.  move.b (a0,d5.w*4),d0
  3272.  move.w (a1,d0.w*2),(a3)
  3273.  addq #4,a3
  3274.  add.w a4,d3
  3275.  addx.l d6,d5
  3276.  dbcs d7,acrossscrn
  3277.  dbcc d7,backbefore
  3278.  bcc.s past1
  3279.  add.w #256,d5 
  3280.  bra.s past1
  3281.  
  3282. acrossscrn:
  3283.  and.w d1,d5
  3284.  move.b (a0,d5.w*4),d0
  3285.  move.w (a1,d0.w*2),(a3)
  3286.  addq #4,a3
  3287.  add.w a4,d3
  3288.  addx.l d2,d5
  3289.  dbcs d7,acrossscrn
  3290.  dbcc d7,backbefore
  3291.  bcc.s past1
  3292.  add.w #256,d5 
  3293. past1:
  3294.  
  3295.  move.w d4,d7
  3296.  bne.s .notdoneyet
  3297.  CACHE_FREEZE_ON d2
  3298.  rts
  3299. .notdoneyet:
  3300.  
  3301.  cmp.w #32,d7
  3302.  ble.s .notoowide
  3303.  move.w #32,d7
  3304. .notoowide
  3305.  sub.w d7,d4  
  3306.  addq #4,a3
  3307.  
  3308.  dbra d7,acrossscrn
  3309.  CACHE_FREEZE_ON d2
  3310.  rts
  3311.  
  3312. waterpt: dc.l waterlist
  3313.  
  3314. waterlist:
  3315.  dc.l waterfile
  3316.  dc.l waterfile+2
  3317.  dc.l waterfile+256
  3318.  dc.l waterfile+256+2
  3319.  dc.l waterfile+512
  3320.  dc.l waterfile+512+2
  3321.  dc.l waterfile+768
  3322.  dc.l waterfile+768+2
  3323. ; dc.l waterfile+768
  3324. ; dc.l waterfile+512+2
  3325. ; dc.l waterfile+512
  3326. ; dc.l waterfile+256+2
  3327. ; dc.l waterfile+256
  3328. ; dc.l waterfile+2
  3329. endwaterlist:
  3330.  
  3331. watertouse: dc.l waterfile
  3332.  
  3333. wtan: dc.w 0
  3334. wateroff: dc.w 0
  3335.  
  3336. texturedwater:
  3337.  
  3338.  add.w wateroff,d5
  3339.  
  3340.  move.l #brightentab,a1
  3341.  move.w dst,d0
  3342.  clr.b d0
  3343.  add.w d0,d0
  3344.  adda.w d0,a1
  3345.  
  3346.  move.w dst,d0
  3347.  asl.w #7,d0
  3348.  add.w wtan,d0
  3349.  and.w #8191,d0
  3350.  move.l #SineTable,a0
  3351.  move.w (a0,d0.w),d0
  3352.  ext.l d0
  3353.  move.w dst,d3
  3354.  add.w #300,d3
  3355.  divs d3,d0
  3356.  asr.w #6,d0
  3357.  add.w #2,d0
  3358.  
  3359.  move.w dst,d3
  3360.  asr.w #7,d3
  3361.  add.w d3,d0
  3362.  
  3363.  muls #104*4,d0
  3364.  move.w d0,a6
  3365.  
  3366.  move.l watertouse,a0
  3367.  
  3368.  move.w startsmoothx,d3
  3369.  dbra d7,acrossscrnw
  3370.  rts
  3371.  
  3372. backbeforew:
  3373.  and.w d1,d5
  3374.  move.w (a0,d5.w*4),d0
  3375.  move.b 1(a3,a6.w),d0
  3376.  move.w (a1,d0.w*2),(a3)
  3377.  addq #4,a3
  3378.  add.w a4,d3
  3379.  addx.l d6,d5
  3380.  dbcs d7,acrossscrnw
  3381.  dbcc d7,backbeforew
  3382.  bcc.s past1w
  3383.  add.w #256,d5 
  3384.  bra.s past1w
  3385.  
  3386. acrossscrnw:
  3387.  and.w d1,d5
  3388.  move.w (a0,d5.w*4),d0
  3389.  move.b 1(a3,a6.w),d0
  3390.  move.w (a1,d0.w*2),(a3)
  3391.  addq #4,a3
  3392.  add.w a4,d3
  3393.  addx.l d2,d5
  3394.  dbcs d7,acrossscrnw
  3395.  dbcc d7,backbeforew
  3396.  bcc.s past1w
  3397.  add.w #256,d5 
  3398. past1w:
  3399.  
  3400.  move.w d4,d7
  3401.  bne.s .notdoneyet
  3402.  rts
  3403. .notdoneyet:
  3404.  
  3405.  cmp.w #32,d7
  3406.  ble.s .notoowide
  3407.  move.w #32,d7
  3408. .notoowide
  3409.  sub.w d7,d4  
  3410.  addq #4,a3
  3411.  
  3412.  dbra d7,acrossscrnw
  3413.  CACHE_FREEZE_ON d2
  3414.  rts
  3415.  
  3416. usewater: dc.w 0
  3417. startsmoothx: dc.w 0
  3418. startsmoothz: dc.w 0
  3419.  
  3420. ********************************
  3421. *
  3422.  include "AB3:source/ObjDraw3.chipram"
  3423. *
  3424. ********************************
  3425.  
  3426. numframes:
  3427.  dc.w 0
  3428.  
  3429. alframe: dc.l Objects+4096
  3430.  
  3431. alan:
  3432.  dcb.l 6,0
  3433.  dcb.l 6,1
  3434.  dcb.l 6,2
  3435.  dcb.l 6,3
  3436. endalan:
  3437.  
  3438. alanptr: dc.l alan
  3439.  
  3440. Time2: dc.l 0
  3441. dispco:
  3442.  dc.w 0
  3443.  
  3444. KInt_Init    ;VBR Assumed $0
  3445.         move.l $68.w,OLDKINT
  3446.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  3447.         And.b    #$3f,$bfe201        Set Timers
  3448.         Move.b    #$7f,$bfed01
  3449.         Move.b    $bfed01,d0
  3450.         Move.b    #$88,$bfed01
  3451.         St.b    KInt_CCode        
  3452.         Move.b    #$a0,$bfee01        Start Timey Thing
  3453.         Rts                And return
  3454.  
  3455. OLDKINT: dc.l 0
  3456.  
  3457. KInt_Main    
  3458.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  3459.         Move.w    #8,$dff09a        Temp Disable Int.
  3460.         Move.w    $dff01e,d0        Intreqr
  3461.         And.w    #8,d0            Mask Out All X^ K_Int
  3462.     Beq    KInt_End            Not Keyboard Interrupt
  3463.         Lea    $bfed01,a6
  3464.         Move.w    #$8,$dff09c        Clear Int.Request
  3465.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  3466.         Ror.b    #1,d0            Roll to correct
  3467.         Not.b    d0            
  3468.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  3469. .HandShake    Move.b    #8,(a6)
  3470.         Move.b    #7,-$900(a6)
  3471.         Move.b    #0,-$800(a6)
  3472.         Move.b    #0,-$100(a6)
  3473.         Move.b    #$d1,$100(a6)        
  3474.         Tst.b    (a6)    
  3475. .wait        Btst    #0,(a6)
  3476.     Beq.s    .wait
  3477.         Move.b    #$a0,$100(a6)        
  3478.         Move.b    (a6),d0        
  3479.         Move.b    #$88,(a6)
  3480.         Lea    KeyMap,a1
  3481.         Moveq.w    #0,d0
  3482.         Move.b    KInt_CCode(pc),d0
  3483.     Bmi.s    KInt_KeyUp            neg if up 
  3484.  
  3485. KInt_KeyDown
  3486.         st (a1,d0.w)
  3487.     Bra    KInt_End
  3488.  
  3489. KInt_KeyUp
  3490.         And.w    #$7f,d0            Make code Positive
  3491.         clr.b (a1,d0.w)
  3492. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  3493.     
  3494.         Move.w    #$8008,$dff09a        Re-enable Int.
  3495.         Rte
  3496.  
  3497. KInt_CCode    Ds.b    1
  3498. KInt_Askey    Ds.b    1
  3499. KInt_OCode    Ds.w    1
  3500.  
  3501.  
  3502. PLR1_mouse_control
  3503.  jsr ReadMouse
  3504.  move.l #SineTable,a0
  3505.  move.w PLR1s_angspd,d1
  3506.  move.w PLR1s_angpos,d0
  3507.  move.w (a0,d0.w),PLR1s_sinval
  3508.  adda.w #2048,a0
  3509.  move.w (a0,d0.w),PLR1s_cosval
  3510.  
  3511.  move.l PLR1s_xspdval,d6
  3512.  move.l PLR1s_zspdval,d7
  3513.  
  3514.  neg.l d6
  3515.  ble.s .nobug1
  3516.  asr.l #1,d6
  3517.  add.l #1,d6
  3518.  bra.s .bug1
  3519. .nobug1
  3520.  asr.l #1,d6
  3521. .bug1:
  3522.  
  3523.  neg.l d7
  3524.  ble.s .nobug2
  3525.  asr.l #1,d7
  3526.  add.l #1,d7
  3527.  bra.s .bug2
  3528. .nobug2
  3529.  asr.l #1,d7
  3530. .bug2: 
  3531.  
  3532.  move.w PLR1s_sinval,d1
  3533.  move.w PLR1s_cosval,d2
  3534.  
  3535.  move.w d2,d4
  3536.  move.w d1,d5
  3537.  muls lrs,d4
  3538.  muls lrs,d5
  3539.  
  3540.  move.w ymouse,d3
  3541.  sub.w oldymouse,d3
  3542.  add.w d3,oldymouse
  3543.  asr.w #1,d3
  3544.  cmp.w #50,d3
  3545.  ble.s nofastfor
  3546.  move.w #50,d3
  3547. nofastfor:
  3548.  cmp.w #-50,d3
  3549.  bge.s nofastback
  3550.  move.w #-50,d3
  3551. nofastback:
  3552.  
  3553.  muls d3,d2
  3554.  muls d3,d1
  3555.  sub.l d4,d1
  3556.  add.l d5,d2
  3557.  
  3558.  sub.l d1,d6
  3559.  sub.l d2,d7
  3560.  add.l d6,PLR1s_xspdval
  3561.  add.l d7,PLR1s_zspdval
  3562.  move.l PLR1s_xspdval,d6
  3563.  move.l PLR1s_zspdval,d7
  3564.  add.l d6,PLR1s_xoff
  3565.  add.l d7,PLR1s_zoff
  3566.  
  3567.  tst.b PLR1_fire
  3568.  beq.s .firenotpressed
  3569. ; fire was pressed last time.
  3570.  btst #6,$bfe001
  3571.  bne.s .firenownotpressed
  3572. ; fire is still pressed this time.
  3573.  st PLR1_fire
  3574.  bra .doneplr1
  3575.  
  3576. .firenownotpressed:
  3577. ; fire has been released.
  3578.  clr.b PLR1_fire
  3579.  bra .doneplr1
  3580.  
  3581. .firenotpressed
  3582.  
  3583. ; fire was not pressed last frame...
  3584.  
  3585.  btst #6,$bfe001
  3586. ; if it has still not been pressed, go back above
  3587.  bne.s .firenownotpressed
  3588. ; fire was not pressed last time, and was this time, so has
  3589. ; been clicked.
  3590.  st PLR1_clicked
  3591.  st PLR1_fire
  3592.  
  3593. .doneplr1:
  3594.  move.l PLR1s_tyoff,d0
  3595.  move.l PLR1s_yoff,d1
  3596.  move.l PLR1s_yvel,d2
  3597.  sub.l d1,d0
  3598.  bgt.s .aboveground
  3599.  sub.l #1024,d2
  3600.  blt.s .notfast
  3601.  sub.l #2048,d2
  3602. .notfast:
  3603.  add.l d2,d1
  3604.  sub.l d2,d0
  3605.  blt.s .pastitall
  3606.  move.l #0,d2
  3607.  add.l d0,d1
  3608.  bra.s .pastitall
  3609.  
  3610. .aboveground:
  3611.  add.l d2,d1
  3612.  add.l #1024,d2
  3613. .pastitall:
  3614.  
  3615.  move.l d2,PLR1s_yvel
  3616.  move.l d1,PLR1s_yoff
  3617.  
  3618.  rts
  3619.  
  3620. PLR1_follow_path:
  3621.  
  3622.  move.l pathpt,a0
  3623.  move.w (a0),d1
  3624.  move.w d1,PLR1s_xoff
  3625.  move.w 2(a0),d1
  3626.  move.w d1,PLR1s_zoff
  3627.  move.w 4(a0),d0
  3628.  add.w d0,d0
  3629.  and.w #8190,d0
  3630.  move.w d0,PLR1_angpos
  3631.  
  3632.  move.w TempFrames,d0
  3633.  asl.w #3,d0
  3634.  adda.w d0,a0
  3635.  
  3636.  cmp.l #endpath,a0
  3637.  blt notrestartpath
  3638.  move.l #Path,a0
  3639. notrestartpath:
  3640.  move.l a0,pathpt
  3641.  
  3642.  rts
  3643.  
  3644. OldSpace: dc.b 0
  3645. SpaceTapped: dc.b 0
  3646. SPCTAP: dc.b 0
  3647.  even
  3648.  
  3649. PLR1_keyboard_control:
  3650.  
  3651.  move.l #SineTable,a0
  3652.  move.w PLR1s_angpos,d0
  3653.  
  3654.  move.l #KeyMap,a5
  3655.  move.b $40(a5),d1
  3656.  beq.s nottapped
  3657.  tst.b OldSpace
  3658.  bne.s nottapped
  3659.  st SpaceTapped
  3660. nottapped:
  3661.  move.b d1,OldSpace
  3662.  
  3663.  move.w #70,d1
  3664.  move.w #7,d2
  3665.  tst.b $61(a5)
  3666.  beq.s nofaster
  3667.  move.w #120,d1
  3668.  move.w #10,d2
  3669. nofaster:
  3670.  
  3671.  moveq #0,d4 
  3672. ; tst.b $67(a5)
  3673. ; bne.s slidelr
  3674.  
  3675.  tst.b $4f(a5)
  3676.  beq.s noleftturn
  3677.  sub.w d1,d0
  3678. noleftturn
  3679.  move.l #KeyMap,a5
  3680.  tst.b $4e(a5)
  3681.  beq.s norightturn
  3682.  add.w d1,d0
  3683. norightturn
  3684. ; bra.s noslide
  3685.  
  3686. slidelr:
  3687.  tst.b $39(a5)
  3688.  beq.s noleftslide
  3689.  move.w d2,d4
  3690.  asr.w #1,d4
  3691. noleftslide
  3692.  move.l #KeyMap,a5
  3693.  tst.b $3a(a5)
  3694.  beq.s norightslide
  3695.  sub.w d2,d4
  3696.  asr.w #1,d4
  3697. norightslide
  3698.   
  3699. noslide:
  3700.   
  3701.  and.w #8191,d0
  3702.  move.w d0,PLR1s_angpos
  3703.  
  3704.  move.w (a0,d0.w),PLR1s_sinval
  3705.  adda.w #2048,a0
  3706.  move.w (a0,d0.w),PLR1s_cosval
  3707.  
  3708.  move.l PLR1s_xspdval,d6
  3709.  move.l PLR1s_zspdval,d7
  3710.  
  3711.  neg.l d6
  3712.  ble.s .nobug1
  3713.  asr.l #1,d6
  3714.  add.l #1,d6
  3715.  bra.s .bug1
  3716. .nobug1
  3717.  asr.l #1,d6
  3718. .bug1:
  3719.  
  3720.  neg.l d7
  3721.  ble.s .nobug2
  3722.  asr.l #1,d7
  3723.  add.l #1,d7
  3724.  bra.s .bug2
  3725. .nobug2
  3726.  asr.l #1,d7
  3727. .bug2: 
  3728.  
  3729.  moveq #0,d3
  3730.  
  3731.  tst.b $4c(a5)
  3732.  beq.s noforward
  3733.  neg.w d2
  3734.  move.w d2,d3
  3735.  
  3736. noforward:
  3737.  tst.b $4d(a5)
  3738.  beq.s nobackward
  3739.  move.w d2,d3
  3740. nobackward:
  3741.  
  3742.  move.w d3,d2
  3743.  asl.w #3,d2
  3744.  move.w d2,d1
  3745.  add.w d2,d1
  3746.  add.w d2,d1
  3747.  add.w Bobble,d1
  3748.  and.w #8190,d1
  3749.  move.w d1,Bobble
  3750.  
  3751.  move.w PLR1s_sinval,d1
  3752.  muls d3,d1
  3753.  move.w PLR1s_cosval,d2
  3754.  muls d3,d2
  3755.  
  3756.  sub.l d1,d6
  3757.  sub.l d2,d7
  3758.  move.w PLR1s_sinval,d1
  3759.  muls d4,d1
  3760.  move.w PLR1s_cosval,d2
  3761.  muls d4,d2
  3762.  sub.l d2,d6
  3763.  add.l d1,d7
  3764.  
  3765.  add.l d6,PLR1s_xspdval
  3766.  add.l d7,PLR1s_zspdval
  3767.  move.l PLR1s_xspdval,d6
  3768.  move.l PLR1s_zspdval,d7
  3769.  add.l d6,PLR1s_xoff
  3770.  add.l d7,PLR1s_zoff
  3771.  
  3772.  tst.b PLR1_fire
  3773.  beq.s .firenotpressed
  3774. ; fire was pressed last time.
  3775.  tst.b $65(a5)
  3776.  beq.s .firenownotpressed
  3777. ; fire is still pressed this time.
  3778.  st PLR1_fire
  3779.  bra .doneplr1
  3780.  
  3781. .firenownotpressed:
  3782. ; fire has been released.
  3783.  clr.b PLR1_fire
  3784.  bra .doneplr1
  3785.  
  3786. .firenotpressed
  3787.  
  3788. ; fire was not pressed last frame...
  3789.  
  3790.  tst.b $65(a5)
  3791. ; if it has still not been pressed, go back above
  3792.  beq.s .firenownotpressed
  3793. ; fire was not pressed last time, and was this time, so has
  3794. ; been clicked.
  3795.  st PLR1_clicked
  3796.  st PLR1_fire
  3797.  
  3798. .doneplr1:
  3799.  
  3800.  move.l PLR1s_tyoff,d0
  3801.  move.l PLR1s_yoff,d1
  3802.  move.l PLR1s_yvel,d2
  3803.  sub.l d1,d0
  3804.  bgt.s .aboveground
  3805.  sub.l #1024,d2
  3806.  blt.s .notfast
  3807.  sub.l #2048,d2
  3808. .notfast:
  3809.  add.l d2,d1
  3810.  sub.l d2,d0
  3811.  blt.s .pastitall
  3812.  move.l #0,d2
  3813.  add.l d0,d1
  3814.  bra.s .pastitall
  3815.  
  3816. .aboveground:
  3817.  add.l d2,d1
  3818.  add.l #1024,d2
  3819. .pastitall:
  3820.  
  3821.  move.l d2,PLR1s_yvel
  3822.  move.l d1,PLR1s_yoff
  3823.  
  3824.  rts
  3825.  
  3826.  
  3827. Chan0inter:
  3828.  
  3829.  move.w #$0010,$dff000+intreq
  3830.  
  3831.  addq.w #1,FramesToDraw
  3832.  tst.b counting
  3833.  beq nostopcounter
  3834.  JSR STOPCOUNTNOADD
  3835. nostopcounter:
  3836.  movem.l d0-d7/a0-a6,-(a7)
  3837.  
  3838.  moveq #0,d7
  3839.  move.l #KeyMap,a5
  3840.  tst.b $4f(a5)
  3841.  beq.s nop1
  3842.  bset #0,d7
  3843. nop1:
  3844.  tst.b $4e(a5)
  3845.  beq.s nop2
  3846.  bset #1,d7
  3847. nop2:
  3848.  tst.b $4c(a5)
  3849.  beq.s nop3
  3850.  bset #2,d7
  3851. nop3:
  3852.  tst.b $4d(a5)
  3853.  beq.s nop4
  3854.  bset #3,d7
  3855. nop4:
  3856.  tst.b $39(a5)
  3857.  beq.s nop5
  3858.  bset #4,d7
  3859. nop5:
  3860.  tst.b $3a(a5)
  3861.  beq.s nop6
  3862.  bset #5,d7
  3863. nop6:
  3864.  tst.b $61(a5)
  3865.  beq.s nop7
  3866.  bset #6,d7
  3867. nop7:
  3868.  tst.b $65(a5)
  3869.  beq.s nop8
  3870.  bset #7,d7
  3871. nop8:
  3872.  move.l RECORDPTR,a0
  3873.  move.b d7,(a0)
  3874.  
  3875.  clr.b d7
  3876.  tst.b $40(a5)
  3877.  beq.s nop9
  3878.  bset #7,d7
  3879. nop9:
  3880.  or.b d7,1(a0)
  3881.  
  3882.  addq #2,a0
  3883.  move.l a0,RECORDPTR
  3884.  
  3885.  tst.b oktodisplay
  3886.  beq dontshowtime
  3887.  clr.b oktodisplay
  3888.  subq.w #1,dispco
  3889.  bgt dontshowtime
  3890.  move.w #10,dispco
  3891.  
  3892.  move.l #TimerScr+10,a0
  3893.  move.l TimeCount,d0
  3894.  bge.s timenotneg
  3895.  move.l #1111*256,d0
  3896. timenotneg:
  3897.  asr.l #8,d0
  3898.  move.l #digits,a1
  3899.  move.w #7,d2
  3900. digitlop
  3901.  divs #10,d0
  3902.  swap d0
  3903.  lea (a1,d0.w*8),a2
  3904.  move.b (a2)+,(a0)
  3905.  move.b (a2)+,24(a0)
  3906.  move.b (a2)+,24*2(a0)
  3907.  move.b (a2)+,24*3(a0)
  3908.  move.b (a2)+,24*4(a0)
  3909.  move.b (a2)+,24*5(a0)
  3910.  move.b (a2)+,24*6(a0)
  3911.  move.b (a2)+,24*7(a0)
  3912.  subq #1,a0
  3913.  swap d0
  3914.  ext.l d0
  3915.  dbra d2,digitlop
  3916.  
  3917.  move.l #TimerScr+10+24*10,a0
  3918.  move.l NumTimes,d0
  3919.  move.l #digits,a1
  3920.  move.w #3,d2
  3921. digitlop2
  3922.  divs #10,d0
  3923.  swap d0
  3924.  lea (a1,d0.w*8),a2
  3925.  move.b (a2)+,(a0)
  3926.  move.b (a2)+,24(a0)
  3927.  move.b (a2)+,24*2(a0)
  3928.  move.b (a2)+,24*3(a0)
  3929.  move.b (a2)+,24*4(a0)
  3930.  move.b (a2)+,24*5(a0)
  3931.  move.b (a2)+,24*6(a0)
  3932.  move.b (a2)+,24*7(a0)
  3933.  subq #1,a0
  3934.  swap d0
  3935.  ext.l d0
  3936.  dbra d2,digitlop2
  3937.  
  3938.  move.l #TimerScr+10+24*20,a0
  3939.  moveq #0,d0
  3940.  move.w FramesToDraw,d0
  3941.  move.l #digits,a1
  3942.  move.w #2,d2
  3943. digitlop3
  3944.  divs #10,d0
  3945.  swap d0
  3946.  lea (a1,d0.w*8),a2
  3947.  move.b (a2)+,(a0)
  3948.  move.b (a2)+,24(a0)
  3949.  move.b (a2)+,24*2(a0)
  3950.  move.b (a2)+,24*3(a0)
  3951.  move.b (a2)+,24*4(a0)
  3952.  move.b (a2)+,24*5(a0)
  3953.  move.b (a2)+,24*6(a0)
  3954.  move.b (a2)+,24*7(a0)
  3955.  subq #1,a0
  3956.  swap d0
  3957.  ext.l d0
  3958.  dbra d2,digitlop3
  3959.  
  3960. dontshowtime:
  3961.  
  3962.  move.w Robotanimpos,d0
  3963.  add.w #6*38,d0
  3964.  cmp.w #6*38*64,d0
  3965.  blt.s norebot
  3966.  move.w #0,d0
  3967. norebot:
  3968.  move.w d0,Robotanimpos
  3969.  
  3970.  tst.w d0
  3971.  seq d1
  3972.  cmp.w #6*32*38,d0
  3973.  seq d2
  3974.  or.b d2,d1
  3975.  or.b d1,clump
  3976.  
  3977.  move.w Robotarmpos,d0
  3978.  add.w #6*14,d0
  3979.  cmp.w #6*14*64,d0
  3980.  blt.s norebot2
  3981.  move.w #0,d0
  3982. norebot2:
  3983.  move.w d0,Robotarmpos
  3984.  
  3985.  move.l alanptr,a0
  3986.  move.l (a0)+,alframe
  3987.  cmp.l #endalan,a0
  3988.  blt.s nostartalan
  3989.  move.l #alan,a0
  3990. nostartalan:
  3991.  move.l a0,alanptr
  3992.  
  3993.  move.l #$dff000,a6
  3994.  
  3995.  cmp.b #'4',option+2
  3996.  bne.s nomuckabout
  3997.  
  3998.  move.w #$0,d0 
  3999.  tst.b NoiseMade0
  4000.  beq.s noturnoff0
  4001.  move.w #1,d0
  4002. noturnoff0:
  4003.  tst.b NoiseMade1
  4004.  beq.s noturnoff1
  4005.  or.w #2,d0
  4006. noturnoff1:
  4007.  tst.b NoiseMade2
  4008.  beq.s noturnoff2
  4009.  or.w #4,d0
  4010. noturnoff2:
  4011.  tst.b NoiseMade3
  4012.  beq.s noturnoff3
  4013.  or.w #8,d0
  4014. noturnoff3:
  4015.  move.w d0,dmacon(a6)
  4016.  
  4017. nomuckabout:
  4018.  
  4019.  tst.b PLR1MOUSE
  4020.  beq.s PLR1_nomouse
  4021.  bsr PLR1_mouse_control
  4022. PLR1_nomouse:
  4023.  tst.b PLR1KEYS
  4024.  beq.s PLR1_nokeys
  4025.  bsr PLR1_keyboard_control
  4026. PLR1_nokeys:
  4027.  tst.b PLR1PATH
  4028.  beq.s PLR1_nopath
  4029.  bsr PLR1_follow_path
  4030. PLR1_nopath:
  4031.  
  4032.  
  4033.  tst.b PLR2_fire
  4034.  beq.s firenotpressed2
  4035. ; fire was pressed last time.
  4036.  btst #7,$bfe001
  4037.  bne.s firenownotpressed2
  4038. ; fire is still pressed this time.
  4039.  st PLR2_fire
  4040.  bra dointer
  4041.  
  4042. firenownotpressed2:
  4043. ; fire has been released.
  4044.  clr.b PLR2_fire
  4045.  bra dointer
  4046.  
  4047. firenotpressed2
  4048.  
  4049. ; fire was not pressed last frame...
  4050.  
  4051.  btst #7,$bfe001
  4052. ; if it has still not been pressed, go back above
  4053.  bne.s firenownotpressed2
  4054. ; fire was not pressed last time, and was this time, so has
  4055. ; been clicked.
  4056.  st PLR2_clicked
  4057.  st PLR2_fire
  4058.  
  4059. dointer
  4060.  
  4061.  cmp.b #'4',option+2
  4062.  beq fourchannel
  4063.  
  4064.  btst #7,$dff000+intreqrl
  4065.  bne.s newsampbitl
  4066.  
  4067.  movem.l (a7)+,d0-d7/a0-a6
  4068.  tst.b counting
  4069.  beq .nostartcounter
  4070.  JSR STARTCOUNT
  4071. .nostartcounter:
  4072. noneed:
  4073.  
  4074.  rte
  4075.  
  4076. swappedem: dc.w 0
  4077.  
  4078. newsampbitl:
  4079.  
  4080.  move.w #$820f,$dff000+dmacon
  4081.  
  4082.  move.w #$80,$dff000+intreq
  4083.  
  4084.  move.l pos0,a0
  4085.  move.l pos1,a1
  4086.  
  4087.  move.l #tab,a2
  4088.  
  4089.  moveq #0,d0
  4090.  moveq #0,d1
  4091.  move.b vol0left,d0
  4092.  move.b vol1left,d1
  4093.  cmp.b d1,d0
  4094.  bge.s fbig0
  4095.  
  4096. ; d1 is bigger so scale d0 and use d1
  4097. ; as audiochannel volume.
  4098.  
  4099.  exg a0,a1
  4100.  asl.w #6,d0
  4101.  divs d1,d0
  4102.  lsl.w #8,d0
  4103.  adda.w d0,a2
  4104.  move.w d1,$dff0a8
  4105.  bra.s donechan0
  4106.  
  4107. fbig0:
  4108.  tst.w d0
  4109.  beq.s donechan0
  4110.  asl.w #6,d1
  4111.  divs d0,d1
  4112.  lsl.w #8,d1
  4113.  adda.w d1,a2
  4114.  move.w d0,$dff0a8
  4115.  
  4116. donechan0:
  4117.  
  4118.  
  4119.  move.l Aupt0,a3
  4120.  move.l a3,$dff0a0
  4121.  move.l Auback0,Aupt0
  4122.  move.l a3,Auback0
  4123.  
  4124.  move.l Auback0,a3
  4125.  
  4126.  moveq #0,d0
  4127.  moveq #0,d1
  4128.  moveq #0,d2
  4129.  moveq #0,d3
  4130.  moveq #0,d4
  4131.  moveq #0,d5
  4132.  move.w #49,d7
  4133. loop:
  4134.  move.l (a0)+,d0
  4135.  move.b (a1)+,d1
  4136.  move.b (a1)+,d2
  4137.  move.b (a1)+,d3
  4138.  move.b (a1)+,d4
  4139.  move.b (a2,d3.w),d5
  4140.  swap d5
  4141.  move.b (a2,d1.w),d5
  4142.  asl.l #8,d5
  4143.  move.b (a2,d2.w),d5
  4144.  swap d5
  4145.  move.b (a2,d4.w),d5
  4146.  add.l d5,d0
  4147.  move.l d0,(a3)+
  4148.  dbra d7,loop
  4149.  
  4150.  move.l pos0,a0
  4151.  move.l pos1,a1
  4152.  
  4153.  move.l Aupt1,a3
  4154.  move.l a3,$dff0b0
  4155.  move.l Auback1,Aupt1
  4156.  move.l a3,Auback1
  4157.  
  4158.  move.l #tab,a2
  4159.  
  4160.  moveq #0,d0
  4161.  moveq #0,d1
  4162.  move.b vol0right,d0
  4163.  move.b vol1right,d1
  4164.  cmp.b d1,d0
  4165.  slt swappedem
  4166.  bge.s fbig1
  4167.  
  4168. ; d1 is bigger so scale d0 and use d1
  4169. ; as audiochannel volume.
  4170.  
  4171.  exg a0,a1
  4172.  asl.w #6,d0
  4173.  divs d1,d0
  4174.  lsl.w #8,d0
  4175.  adda.w d0,a2
  4176.  move.w d1,$dff0b8
  4177.  bra.s donechan1
  4178.  
  4179. fbig1:
  4180.  tst.w d0
  4181.  beq.s donechan1
  4182.  asl.w #6,d1
  4183.  divs d0,d1
  4184.  lsl.w #8,d1
  4185.  adda.w d1,a2
  4186.  move.w d0,$dff0b8
  4187.  
  4188. donechan1:
  4189.  moveq #0,d0
  4190.  moveq #0,d1
  4191.  moveq #0,d2
  4192.  moveq #0,d3
  4193.  moveq #0,d4
  4194.  moveq #0,d5
  4195.  move.w #49,d7
  4196. loop2:
  4197.  move.l (a0)+,d0
  4198.  move.b (a1)+,d1
  4199.  move.b (a1)+,d2
  4200.  move.b (a1)+,d3
  4201.  move.b (a1)+,d4
  4202.  move.b (a2,d3.w),d5
  4203.  swap d5
  4204.  move.b (a2,d1.w),d5
  4205.  asl.l #8,d5
  4206.  move.b (a2,d2.w),d5
  4207.  swap d5
  4208.  move.b (a2,d4.w),d5
  4209.  add.l d5,d0
  4210.  move.l d0,(a3)+
  4211.  dbra d7,loop2
  4212.  
  4213.  tst.b swappedem
  4214.  beq.s ok01
  4215.  exg a0,a1
  4216. ok01:
  4217.  
  4218.  cmp.l Samp0end,a0
  4219.  blt.s notoffendsamp1
  4220.  move.l #bass,a0
  4221.  move.l #bassend,Samp0end
  4222.  move.b #64,vol0left
  4223.  move.b #64,vol0right
  4224.  tst.b backbeat
  4225.  bne.s playbeat
  4226.  move.l #empty,a0
  4227.  move.l #emptyend,Samp0end
  4228.  move.b #0,vol0left
  4229.  move.b #0,vol0right
  4230. playbeat:
  4231. notoffendsamp1:
  4232.  
  4233.  cmp.l Samp1end,a1
  4234.  blt.s notoffendsamp2
  4235.  move.l #empty,a1
  4236.  move.l #emptyend,Samp1end
  4237.  move.b #0,vol1left
  4238.  move.b #0,vol1right
  4239. notoffendsamp2:
  4240.  
  4241.  move.l a0,pos0
  4242.  move.l a1,pos1
  4243.  
  4244. ******************* Other two channels
  4245.  
  4246.  move.l pos2,a0
  4247.  move.l pos3,a1
  4248.  
  4249.  move.l #tab,a2
  4250.  
  4251.  moveq #0,d0
  4252.  moveq #0,d1
  4253.  move.b vol2left,d0
  4254.  move.b vol3left,d1
  4255.  cmp.b d1,d0
  4256.  bge.s fbig2
  4257.  
  4258. ; d1 is bigger so scale d0 and use d1
  4259. ; as audiochannel volume.
  4260.  
  4261.  exg a0,a1
  4262.  asl.w #6,d0
  4263.  divs d1,d0
  4264.  lsl.w #8,d0
  4265.  adda.w d0,a2
  4266.  move.w d1,$dff0d8
  4267.  bra.s donechan2
  4268.  
  4269. fbig2:
  4270.  tst.w d0
  4271.  beq.s donechan2
  4272.  asl.w #6,d1
  4273.  divs d0,d1
  4274.  lsl.w #8,d1
  4275.  adda.w d1,a2
  4276.  move.w d0,$dff0d8
  4277.  
  4278. donechan2:
  4279.  
  4280.  move.l Aupt2,a3
  4281.  move.l a3,$dff0d0
  4282.  move.l Auback2,Aupt2
  4283.  move.l a3,Auback2
  4284.  
  4285.  moveq #0,d0
  4286.  moveq #0,d1
  4287.  moveq #0,d2
  4288.  moveq #0,d3
  4289.  moveq #0,d4
  4290.  moveq #0,d5
  4291.  move.w #49,d7
  4292. loop3:
  4293.  move.l (a0)+,d0
  4294.  move.b (a1)+,d1
  4295.  move.b (a1)+,d2
  4296.  move.b (a1)+,d3
  4297.  move.b (a1)+,d4
  4298.  move.b (a2,d3.w),d5
  4299.  swap d5
  4300.  move.b (a2,d1.w),d5
  4301.  asl.l #8,d5
  4302.  move.b (a2,d2.w),d5
  4303.  swap d5
  4304.  move.b (a2,d4.w),d5
  4305.  add.l d5,d0
  4306.  move.l d0,(a3)+
  4307.  dbra d7,loop3
  4308.  
  4309.  move.l pos2,a0
  4310.  move.l pos3,a1
  4311.  
  4312.  move.l Aupt3,a3
  4313.  move.l a3,$dff0c0
  4314.  move.l Auback3,Aupt3
  4315.  move.l a3,Auback3
  4316.  
  4317.  move.l #tab,a2
  4318.  
  4319.  moveq #0,d0
  4320.  moveq #0,d1
  4321.  move.b vol2right,d0
  4322.  move.b vol3right,d1
  4323.  cmp.b d1,d0
  4324.  slt.s swappedem
  4325.  bge.s fbig3
  4326.  
  4327.  exg a0,a1
  4328.  asl.w #6,d0
  4329.  divs d1,d0
  4330.  lsl.w #8,d0
  4331.  adda.w d0,a2
  4332.  move.w d1,$dff0c8
  4333.  bra.s donechan3
  4334.  
  4335. fbig3:
  4336.  tst.w d0
  4337.  beq.s donechan3
  4338.  asl.w #6,d1
  4339.  divs d0,d1
  4340.  lsl.w #8,d1
  4341.  adda.w d1,a2
  4342.  move.w d0,$dff0c8
  4343. donechan3:
  4344.  
  4345.  moveq #0,d0
  4346.  moveq #0,d1
  4347.  moveq #0,d2
  4348.  moveq #0,d3
  4349.  moveq #0,d4
  4350.  moveq #0,d5
  4351.  move.w #49,d7
  4352. loop4:
  4353.  move.l (a0)+,d0
  4354.  move.b (a1)+,d1
  4355.  move.b (a1)+,d2
  4356.  move.b (a1)+,d3
  4357.  move.b (a1)+,d4
  4358.  move.b (a2,d3.w),d5
  4359.  swap d5
  4360.  move.b (a2,d1.w),d5
  4361.  asl.l #8,d5
  4362.  move.b (a2,d2.w),d5
  4363.  swap d5
  4364.  move.b (a2,d4.w),d5
  4365.  add.l d5,d0
  4366.  move.l d0,(a3)+
  4367.  dbra d7,loop4
  4368.  
  4369.  tst.b swappedem
  4370.  beq.s ok23
  4371.  exg a0,a1
  4372. ok23:
  4373.  
  4374.  cmp.l Samp2end,a0
  4375.  blt.s notoffendsamp3
  4376.  move.l #empty,a0
  4377.  move.l #emptyend,Samp2end
  4378.  move.b #0,vol2left
  4379.  move.b #0,vol2right
  4380. notoffendsamp3:
  4381.  
  4382.  cmp.l Samp3end,a1
  4383.  blt.s notoffendsamp4
  4384.  move.l #empty,a1
  4385.  move.l #emptyend,Samp3end
  4386.  move.b #0,vol3left
  4387.  move.b #0,vol3right
  4388. notoffendsamp4:
  4389.  
  4390.  move.l a0,pos2
  4391.  move.l a1,pos3
  4392.  
  4393.  movem.l (a7)+,d0-d7/a0-a6
  4394.  tst.b counting
  4395.  beq .nostartcounter
  4396.  JSR STARTCOUNT
  4397. .nostartcounter:
  4398.  
  4399.  rte
  4400.  
  4401. ***********************************
  4402. * 4 channel sound routine
  4403. ***********************************
  4404.  
  4405. fourchannel:
  4406.  
  4407.  move.l #$dff000,a6
  4408.  
  4409.  btst #7,intreqrl(a6)
  4410.  beq.s nofinish0
  4411.  move.l #null,$a0(a6)
  4412.  move.w #100,$a4(a6)
  4413.  tst.b backbeat
  4414.  beq.s nobeat
  4415.  
  4416.  move.l #bass,$a0(a6)
  4417.  move.w #18370/2,$a4(a6)
  4418.  move.w #64,$a8(a6)
  4419.  
  4420. nobeat:
  4421.  
  4422.  move.w #$0080,intreq(a6)
  4423. nofinish0:
  4424.  
  4425.  
  4426.  tst.b NoiseMade0p
  4427.  beq.s NoChan0sound
  4428.  
  4429.  move.l Samp0end,d0
  4430.  move.l pos0,d1
  4431.  sub.l d1,d0
  4432.  asr.w #1,d0
  4433.  move.w d0,$a4(a6)
  4434.  move.l d1,$a0(a6)
  4435.  move.w #$8201,dmacon(a6)
  4436.  moveq #0,d0
  4437.  move.b vol0left,d0
  4438.  add.b vol0right,d0
  4439.  asr.b #1,d0
  4440.  move.w d0,$a8(a6)
  4441.  
  4442. NoChan0sound:
  4443.  
  4444.  btst #0,intreqr(a6)
  4445.  beq.s nofinish1
  4446.  move.l #null,$b0(a6)
  4447.  move.w #100,$b4(a6)
  4448.  move.w #$0100,intreq(a6)
  4449. nofinish1:
  4450.  
  4451.  tst.b NoiseMade1p
  4452.  beq.s NoChan1sound
  4453.  
  4454.  move.l Samp1end,d0
  4455.  move.l pos1,d1
  4456.  sub.l d1,d0
  4457.  asr.w #1,d0
  4458.  move.w d0,$b4(a6)
  4459.  move.l d1,$b0(a6)
  4460.  move.w #$8202,dmacon(a6)
  4461.  moveq #0,d0
  4462.  move.b vol1left,d0
  4463.  add.b vol1right,d0
  4464.  asr.b #1,d0
  4465.  move.w d0,$b8(a6)
  4466.  
  4467. NoChan1sound:
  4468.  
  4469.  
  4470.  btst #1,intreqr(a6)
  4471.  beq.s nofinish2
  4472.  move.l #null,$c0(a6)
  4473.  move.w #100,$c4(a6)
  4474.  move.w #$0200,intreq(a6)
  4475. nofinish2:
  4476.  
  4477.  tst.b NoiseMade2p
  4478.  beq.s NoChan2sound
  4479.  
  4480.  move.l Samp2end,d0
  4481.  move.l pos2,d1
  4482.  sub.l d1,d0
  4483.  asr.w #1,d0
  4484.  move.w d0,$c4(a6)
  4485.  move.l d1,$c0(a6)
  4486.  move.w #$8204,dmacon(a6)
  4487.  moveq #0,d0
  4488.  move.b vol2left,d0
  4489.  add.b vol2right,d0
  4490.  asr.b #1,d0
  4491.  move.w d0,$c8(a6)
  4492.  
  4493. NoChan2sound:
  4494.  
  4495.  btst #2,intreqr(a6)
  4496.  beq.s nofinish3
  4497.  move.l #null,$d0(a6)
  4498.  move.w #100,$d4(a6)
  4499.  move.w #$0400,intreq(a6)
  4500. nofinish3:
  4501.  
  4502.  tst.b NoiseMade3p
  4503.  beq.s NoChan3sound
  4504.  
  4505.  move.l Samp3end,d0
  4506.  move.l pos3,d1
  4507.  sub.l d1,d0
  4508.  asr.w #1,d0
  4509.  move.w d0,$d4(a6)
  4510.  move.l d1,$d0(a6)
  4511.  move.w #$8208,dmacon(a6)
  4512.  moveq #0,d0
  4513.  move.b vol2left,d0
  4514.  add.b vol2right,d0
  4515.  asr.b #1,d0
  4516.  move.w d0,$d8(a6)
  4517.  
  4518. NoChan3sound:
  4519.  
  4520. nomorechannels:
  4521.  
  4522.  move.l NoiseMade0,NoiseMade0p
  4523.  move.l #0,NoiseMade0
  4524.  
  4525.  movem.l (a7)+,d0-d7/a0-a6
  4526.  tst.b counting
  4527.  beq .nostartcounter
  4528.  JSR STARTCOUNT
  4529. .nostartcounter:
  4530.  
  4531.  rte
  4532.  
  4533. backbeat: dc.w 0
  4534.  
  4535. Samp0end: dc.l emptyend
  4536. Samp1end: dc.l emptyend
  4537. Samp2end: dc.l emptyend
  4538. Samp3end: dc.l emptyend
  4539.  
  4540. Aupt0: dc.l null
  4541. Auback0: dc.l null+500
  4542. Aupt2: dc.l null3
  4543. Auback2: dc.l null3+500
  4544. Aupt3: dc.l null4
  4545. Auback3: dc.l null4+500
  4546. Aupt1: dc.l null2
  4547. Auback1: dc.l null2+500
  4548.  
  4549. NoiseMade0: dc.b 0
  4550. NoiseMade1: dc.b 0
  4551. NoiseMade2: dc.b 0
  4552. NoiseMade3: dc.b 0
  4553. NoiseMade0p: dc.b 0
  4554. NoiseMade1p: dc.b 0
  4555. NoiseMade2p: dc.b 0
  4556. NoiseMade3p: dc.b 0
  4557.  
  4558. empty: ds.l 100
  4559. emptyend:
  4560.  
  4561. **************************************
  4562. * I want a routine to calculate all the
  4563. * info needed for the sound player to
  4564. * work, given say position of noise, volume
  4565. * and sample number.
  4566.  
  4567. Samplenum: dc.w 0
  4568. Noisex: dc.w 0
  4569. Noisez: dc.w 0
  4570. Noisevol: dc.w 0
  4571. chanpick: dc.w 0
  4572.  
  4573. PLAYEDTAB: ds.l 20
  4574.  
  4575. MakeSomeNoise:
  4576.  
  4577.  move.w Noisex,d1
  4578.  muls d1,d1
  4579.  move.w Noisez,d2
  4580.  muls d2,d2
  4581.  move.w #64,d3
  4582.  moveq #1,d0
  4583.  add.l d1,d2
  4584.  beq pastcalc
  4585.  
  4586.  move.w #31,d0
  4587. .findhigh
  4588.  btst d0,d2
  4589.  bne .foundhigh
  4590.  dbra d0,.findhigh
  4591. .foundhigh
  4592.  asr.w #1,d0
  4593.  clr.l d3
  4594.  bset d0,d3
  4595.  move.l d3,d0
  4596.  
  4597.  move.w d0,d3
  4598.  muls d3,d3    ; x*x
  4599.  sub.l d2,d3    ; x*x-a
  4600.  asr.l #1,d3    ; (x*x-a)/2
  4601.  divs d0,d3    ; (x*x-a)/2x
  4602.  sub.w d3,d0    ; second approx
  4603.  bgt .stillnot0
  4604.  move.w #1,d0
  4605. .stillnot0
  4606.  
  4607.  move.w d0,d3
  4608.  muls d3,d3
  4609.  sub.l d2,d3
  4610.  asr.l #1,d3
  4611.  divs d0,d3
  4612.  sub.w d3,d0    ; second approx
  4613.  bgt .stillnot02
  4614.  move.w #1,d0
  4615. .stillnot02
  4616.  
  4617.  move.w #64,d3
  4618.  muls Noisevol,d3
  4619.  asr.w #1,d0
  4620.  addq #1,d0
  4621.  divs d0,d3
  4622.  
  4623.  cmp.w #64,d3
  4624.  ble.s notooloud
  4625.  move.w #64,d3
  4626. notooloud:
  4627.  
  4628. pastcalc:
  4629.  
  4630.     ; d3 contains volume of noise.
  4631.     
  4632.  move.w d3,d4
  4633.  
  4634.  move.w d3,d2
  4635.  muls Noisex,d2
  4636.  add.w d0,d0
  4637.  divs d0,d2
  4638.  
  4639.  bgt.s quietleft
  4640.  add.w d2,d4
  4641.  bge.s donequiet
  4642.  move.w #0,d4
  4643.  bra.s donequiet
  4644. quietleft:
  4645.  sub.w d2,d3
  4646.  bge.s donequiet
  4647.  move.w #0,d3
  4648. donequiet:
  4649.  
  4650. ; d3=leftvol?
  4651. ; d4=rightvol?
  4652.  
  4653.  move.l #SampleList,a3
  4654.  
  4655.  tst.b chanpick
  4656.  seq NoiseMade0
  4657.  beq.s chan0
  4658.  cmp.b #1,chanpick
  4659.  seq NoiseMade1
  4660.  beq chan1
  4661.  cmp.b #2,chanpick
  4662.  seq NoiseMade2
  4663.  beq chan2
  4664.  st NoiseMade3
  4665.  
  4666.  move.w Samplenum,d0
  4667.  move.l (a3,d0.w*8),a1
  4668.  move.l 4(a3,d0.w*8),a2
  4669.  
  4670.  tst.b notifplaying
  4671.  beq.s .play
  4672.  cmp.l Samp3end,a2
  4673.  bne.s .play
  4674.  rts
  4675. .play
  4676.  
  4677.  move.b d0,PLAYEDTAB+9
  4678.  move.b d3,PLAYEDTAB+1+9
  4679.  move.b d4,PLAYEDTAB+2+9
  4680.  move.b d3,vol3left
  4681.  move.b d4,vol3right
  4682.  move.l a1,pos3
  4683.  move.l a2,Samp3end
  4684.  
  4685.  rts
  4686.  
  4687. chan0: 
  4688.  move.w Samplenum,d0
  4689.  
  4690.  move.l (a3,d0.w*8),a1
  4691.  move.l 4(a3,d0.w*8),a2
  4692.  tst.b notifplaying
  4693.  beq.s .play
  4694.  cmp.l Samp0end,a2
  4695.  bne.s .play
  4696.  rts
  4697. .play
  4698.  move.b d0,PLAYEDTAB
  4699.  move.b d3,PLAYEDTAB+1
  4700.  move.b d4,PLAYEDTAB+2
  4701.  move.l a1,pos0
  4702.  move.l a2,Samp0end
  4703.  move.b d3,vol0left
  4704.  move.b d4,vol0right
  4705.  
  4706.  rts
  4707.  
  4708. chan1:
  4709.  
  4710.  move.w Samplenum,d0
  4711.  move.l (a3,d0.w*8),a1
  4712.  move.l 4(a3,d0.w*8),a2
  4713.  tst.b notifplaying
  4714.  beq.s .play
  4715.  cmp.l Samp1end,a2
  4716.  bne.s .play
  4717.  rts
  4718. .play
  4719.  move.b d0,PLAYEDTAB+3
  4720.  move.b d3,PLAYEDTAB+1+3
  4721.  move.b d4,PLAYEDTAB+2+3
  4722.  move.b d3,vol1left
  4723.  move.b d4,vol1right
  4724.  move.l a1,pos1
  4725.  move.l a2,Samp1end
  4726.  
  4727.  rts
  4728.  
  4729. chan2: 
  4730.  move.w Samplenum,d0
  4731.  move.l (a3,d0.w*8),a1
  4732.  move.l 4(a3,d0.w*8),a2
  4733.  tst.b notifplaying
  4734.  beq.s .play
  4735.  cmp.l Samp1end,a2
  4736.  bne.s .play
  4737.  rts
  4738. .play
  4739.  move.b d0,PLAYEDTAB+6
  4740.  move.b d3,PLAYEDTAB+1+6
  4741.  move.b d4,PLAYEDTAB+2+6
  4742.  move.l a1,pos2
  4743.  move.l a2,Samp2end
  4744.  move.b d3,vol2left
  4745.  move.b d4,vol2right
  4746.  
  4747.  rts
  4748.  
  4749. SampleList
  4750.  dc.l Scream,EndScream
  4751.  dc.l Shoot,EndShoot
  4752.  dc.l Munch,EndMunch
  4753.  dc.l PooGun,EndPooGun
  4754.  dc.l Collect,EndCollect
  4755.  dc.l DoorNoise,EndDoorNoise
  4756.  dc.l bass,bassend
  4757.  dc.l Stomp,EndStomp
  4758.  dc.l LowScream,EndLowScream
  4759.  dc.l BaddieGun,EndBaddieGun
  4760.  dc.l SwitchNoise,EndSwitch
  4761.  
  4762. saveinters:  
  4763.  dc.w 0
  4764.  
  4765. z: dc.w 10
  4766.  
  4767. notifplaying:
  4768.  dc.w 0
  4769.  
  4770. audpos1: dc.w 0
  4771. audpos1b: dc.w 0
  4772. audpos2: dc.w 0
  4773. audpos2b: dc.w 0
  4774. audpos3: dc.w 0
  4775. audpos3b: dc.w 0
  4776. audpos4: dc.w 0
  4777. audpos4b: dc.w 0
  4778.  
  4779. vol0left: dc.w 0
  4780. vol0right: dc.w 0
  4781. vol1left: dc.w 0
  4782. vol1right: dc.w 0
  4783. vol2left: dc.w 0
  4784. vol2right: dc.w 0
  4785. vol3left: dc.w 0
  4786. vol3right: dc.w 0
  4787.  
  4788. pos: dc.l 0
  4789.  
  4790. pos0: dc.l empty
  4791. pos1: dc.l empty
  4792. pos2: dc.l empty
  4793. pos3: dc.l empty
  4794.  
  4795.  
  4796. numtodo dc.w 0
  4797.  
  4798. npt: dc.w 0
  4799.  
  4800. pretab:
  4801. val SET 0
  4802.  REPT 128
  4803.  dc.b val
  4804. val SET val+1
  4805.  ENDR
  4806. val SET -128
  4807.  REPT 128
  4808.  dc.b val
  4809. val SET val+1
  4810.  ENDR 
  4811.  
  4812. tab:
  4813.  ds.b 256*65
  4814.  
  4815.  
  4816. test: dc.l 0
  4817.  ds.l 30
  4818.  
  4819.  even
  4820. ConstCols:
  4821.  incbin "ConstCols"
  4822.  even
  4823. Smoothscalecols:
  4824. ; incbin "smoothbumppalscaled"
  4825.  even
  4826. SmoothTile:
  4827. ; incbin "smoothbumptile"
  4828.  even
  4829. Bumpscalecols:
  4830.  incbin "Bumppalscaled"
  4831.  even
  4832. Bumptile:
  4833.  incbin "bumptile"
  4834.  even
  4835. scalecols: incbin "bytepixpalscaled"
  4836.  even
  4837. floorscalecols: incbin "floorpalscaled"
  4838.  even
  4839. walltiles:
  4840.  incbin "bytepixfile"
  4841.  even
  4842. floortile:
  4843.  incbin "floortile" 
  4844.  even
  4845. wallrouts:
  4846. ; incbin "2x2WallDraw" 
  4847.  CNOP 0,64
  4848. BackPicture:
  4849.  incbin "backfile"
  4850. EndBackPicture:
  4851.  
  4852. drawpt: dc.l colbars2
  4853. olddrawpt: dc.l colbars
  4854. frompt: dc.l 0 
  4855.  
  4856. SineTable:
  4857.  incbin "bigsine"
  4858.  
  4859. angpos: dc.w 0
  4860. angspd: dc.w 0
  4861. flooryoff: dc.w 0
  4862. xoff: dc.l 0
  4863. yoff: dc.l 0
  4864. yvel: dc.l 0
  4865. zoff: dc.l 0
  4866. tyoff: dc.l 0
  4867. xspdval: dc.l 0
  4868. zspdval: dc.l 0
  4869. Zone: dc.w 0
  4870.  
  4871. PLR1: dc.b $ff
  4872.  even
  4873. PLR1_cosval: dc.w 0
  4874. PLR1_sinval: dc.w 0
  4875. PLR1_angpos: dc.w 0
  4876. PLR1_angspd: dc.w 0
  4877. PLR1_xoff: dc.l 0
  4878. PLR1_yoff: dc.l 0
  4879. PLR1_yvel: dc.l 0
  4880. PLR1_zoff: dc.l 0
  4881. PLR1_tyoff: dc.l 0
  4882. PLR1_xspdval: dc.l 0
  4883. PLR1_zspdval: dc.l 0
  4884. PLR1_Zone: dc.w 0
  4885. PLR1_Roompt: dc.l 0
  4886. PLR1_OldRoompt: dc.l 0
  4887. PLR1_PointsToRotatePtr: dc.l 0
  4888. PLR1_ListOfGraphRooms: dc.l 0
  4889. PLR1_oldxoff: dc.l 0
  4890. PLR1_oldzoff: dc.l 0
  4891.  
  4892.  ds.w 4
  4893.  
  4894. PLR1s_cosval: dc.w 0
  4895. PLR1s_sinval: dc.w 0
  4896. PLR1s_angpos: dc.w 0
  4897. PLR1s_angspd: dc.w 0
  4898. PLR1s_xoff: dc.l 0
  4899. PLR1s_yoff: dc.l 0
  4900. PLR1s_yvel: dc.l 0
  4901. PLR1s_zoff: dc.l 0
  4902. PLR1s_tyoff: dc.l 0
  4903. PLR1s_xspdval: dc.l 0
  4904. PLR1s_zspdval: dc.l 0
  4905. PLR1s_Zone: dc.w 0
  4906. PLR1s_Roompt: dc.l 0
  4907. PLR1s_OldRoompt: dc.l 0
  4908. PLR1s_PointsToRotatePtr: dc.l 0
  4909. PLR1s_ListOfGraphRooms: dc.l 0
  4910. PLR1s_oldxoff: dc.l 0
  4911. PLR1s_oldzoff: dc.l 0
  4912.  
  4913.  ds.w 4
  4914.  
  4915. PLR2: dc.b $0
  4916.  even
  4917. PLR2_cosval: dc.w 0
  4918. PLR2_sinval: dc.w 0
  4919. PLR2_angpos: dc.w 0
  4920. PLR2_angspd: dc.w 0
  4921. PLR2_xoff: dc.l 0
  4922. PLR2_yoff: dc.l 0
  4923. PLR2_yvel: dc.l 0
  4924. PLR2_zoff: dc.l 0
  4925. PLR2_tyoff: dc.l 0
  4926. PLR2_xspdval: dc.l 0
  4927. PLR2_zspdval: dc.l 0
  4928. PLR2_Zone: dc.w 0
  4929. PLR2_Roompt: dc.l 0
  4930. PLR2_OldRoompt: dc.l 0
  4931. PLR2_PointsToRotatePtr: dc.l 0
  4932. PLR2_ListOfGraphRooms: dc.l 0
  4933. PLR2_ForwardSpd: dc.w 0
  4934.  
  4935. liftanimtab:
  4936.  
  4937. endliftanimtab:
  4938.  
  4939. glassball: incbin "glassball.inc"
  4940. endglass
  4941. glassballpt: dc.l glassball
  4942.  
  4943. rndtab: ; incbin "randfile"
  4944. endrnd: 
  4945.  
  4946. brightanimtab:
  4947.  dcb.w 200,20
  4948.  dc.w 5
  4949.  dc.w 10,20
  4950.  dc.w 5
  4951.  dcb.w 30,20
  4952.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  4953.  dcb.w 40,0
  4954.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  4955.  dcb.w 300,0
  4956.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  4957.  dc.w -1
  4958.  
  4959. Roompt: dc.l 0
  4960. OldRoompt: dc.l 0
  4961.  
  4962. *****************************************************************
  4963.  *
  4964.  include "AB3:source/LevelData2"
  4965.  *
  4966. *****************************************************************
  4967.  
  4968.  
  4969. wallpt: dc.l 0
  4970. floorpt: dc.l 0
  4971.  
  4972. Rotated:
  4973.  ds.l 800 
  4974. ObjRotated:
  4975.  ds.l 800
  4976.  
  4977. OnScreen:
  4978.  ds.l 800 
  4979.  
  4980. startwait: dc.w 0
  4981. endwait: dc.w 0
  4982.  
  4983. Faces: incbin "faces2raw"
  4984.  
  4985. *******************************************************************
  4986.  
  4987. consttab:
  4988.  incbin "constantfile"
  4989.  
  4990. *******************************************************************
  4991.  
  4992. darkentab: incbin "darkenedcols"
  4993. brightentab: incbin "brightenfile"
  4994. WorkSpace:
  4995.  ds.l 8192 
  4996. waterfile: incbin "waterfile"
  4997.  
  4998. RECORDPTR: dc.l RECORDBUFFER
  4999.  
  5000. RECORDBUFFER: ds.b 50*1000
  5001.  
  5002.  SECTION ffff,CODE_C
  5003.  
  5004. nullspr: dc.l 0
  5005.  
  5006.  cnop 0,8
  5007. borders:
  5008.  incbin "borderspr"
  5009.  
  5010. null: ds.w 500
  5011. null2: ds.w 500
  5012. null3: ds.w 500
  5013. null4: ds.w 500
  5014.  
  5015.  
  5016. Blurbfield:
  5017.  
  5018.  dc.w bpl1ptl
  5019. bl1l: dc.w 0
  5020.  dc.w bpl1pth
  5021. bl1h: dc.w 0
  5022.  
  5023.  dc.w diwstart,$2c81
  5024.  dc.w diwstop,$1cc1
  5025.  dc.w ddfstart,$38
  5026.  dc.w ddfstop,$b8
  5027.  dc.w bplcon0,$9201
  5028.  dc.w bplcon1,0
  5029.  dc.w $106,$c40
  5030. blcols:
  5031.  dc.w col0,0
  5032.  dc.w col1,$fff
  5033.  
  5034.  dc.w $108,0
  5035.  dc.w $10a,0
  5036.  
  5037.  dc.w $ffff,$fffe
  5038.  dc.w $ffff,$fffe
  5039.  
  5040. bigfield:    
  5041.                 ; Start of our copper list.
  5042.  
  5043.  dc.w dmacon,$8020
  5044.  dc.w intreq,$8011
  5045.  dc.w $1fc,$7
  5046.  dc.w diwstart
  5047. winstart: dc.w $2cb1
  5048.  dc.w diwstop
  5049. winstop: dc.w $2c91
  5050.  dc.w ddfstart
  5051. fetchstart: dc.w $48
  5052.  dc.w ddfstop
  5053. fetchstop: dc.w $88
  5054.  
  5055.  dc.w spr0ptl
  5056. s0l:
  5057.  dc.w 0
  5058.  dc.w spr0pth
  5059. s0h:
  5060.  dc.w 0
  5061.  dc.w spr1ptl
  5062. s1l:
  5063.  dc.w 0
  5064.  dc.w spr1pth
  5065. s1h:
  5066.  dc.w 0
  5067.  dc.w spr2ptl
  5068. s2l:
  5069.  dc.w 0
  5070.  dc.w spr2pth
  5071. s2h:
  5072.  dc.w 0
  5073.  dc.w spr3ptl
  5074. s3l:
  5075.  dc.w 0
  5076.  dc.w spr3pth
  5077. s3h:
  5078.  dc.w 0
  5079.  dc.w spr4ptl
  5080. s4l:
  5081.  dc.w 0
  5082.  dc.w spr4pth
  5083. s4h:
  5084.  dc.w 0
  5085.  dc.w spr5ptl
  5086. s5l:
  5087.  dc.w 0
  5088.  dc.w spr5pth
  5089. s5h:
  5090.  dc.w 0
  5091.  dc.w spr6ptl
  5092. s6l:
  5093.  dc.w 0
  5094.  dc.w spr6pth
  5095. s6h:
  5096.  dc.w 0
  5097.  dc.w spr7ptl
  5098. s7l:
  5099.  dc.w 0
  5100.  dc.w spr7pth
  5101. s7h:
  5102.  dc.w 0
  5103.  
  5104.  dc.w $106,$8c42
  5105.  dc.w col0,$0
  5106.  dc.w $106,$c42
  5107.  dc.w col0,0
  5108.  
  5109.  dc.w $106,$c42
  5110.  incbin "borderpal"
  5111.  
  5112.  dc.w bplcon0,$7201
  5113.  dc.w bplcon1
  5114. smoff:
  5115.  dc.w $0
  5116.  
  5117.  dc.w $108
  5118. modulo: dc.w -24
  5119.  dc.w $10a,-24
  5120.  
  5121.  dc.w bpl1pth
  5122. pl1h
  5123.  dc.w 0
  5124.  
  5125.  dc.w bpl1ptl
  5126. pl1l
  5127.  dc.w 0
  5128.  
  5129.  dc.w bpl2pth
  5130. pl2h
  5131.  dc.w 0
  5132.  
  5133.  dc.w bpl2ptl
  5134. pl2l
  5135.  dc.w 0
  5136.  
  5137.  dc.w bpl3pth
  5138. pl3h
  5139.  dc.w 0
  5140.  
  5141.  dc.w bpl3ptl
  5142. pl3l
  5143.  dc.w 0
  5144.  
  5145.  dc.w bpl4pth
  5146. pl4h
  5147.  dc.w 0
  5148.  
  5149.  dc.w bpl4ptl
  5150. pl4l
  5151.  dc.w 0
  5152.  
  5153.  dc.w bpl5pth
  5154. pl5h
  5155.  dc.w 0
  5156.  
  5157.  dc.w bpl5ptl
  5158. pl5l
  5159.  dc.w 0
  5160.  
  5161.  dc.w bpl6pth
  5162. pl6h
  5163.  dc.w 0
  5164.  
  5165.  dc.w bpl6ptl
  5166. pl6l
  5167.  dc.w 0
  5168.  
  5169.  dc.w bpl7pth
  5170. pl7h
  5171.  dc.w 0
  5172.  
  5173.  dc.w bpl7ptl
  5174. pl7l
  5175.  dc.w 0
  5176.  
  5177.  
  5178.  dc.w $1001,$ff00
  5179.  dc.w intreq,$11
  5180. yposcop:
  5181.  dc.w $2a11,$fffe
  5182.  dc.w $8a,0
  5183.  
  5184.  ds.l 104*12
  5185.  
  5186. colbars:
  5187. val SET $2a
  5188.  dcb.l 104*scrheight,$1fe0000
  5189.  dc.w $106,$c42
  5190.  
  5191.  dc.w $80
  5192. pch1:
  5193.  dc.w 0
  5194.  dc.w $82
  5195. pcl1:
  5196.  dc.w 0 
  5197.  dc.w $88,0
  5198.  
  5199.  dc.w $ffff,$fffe       ; End copper list.
  5200.  
  5201.  ds.l 104*12
  5202.  
  5203. colbars2:
  5204. val SET $2a
  5205.  dcb.l 104*scrheight,$1fe0000
  5206.  
  5207.  dc.w $106,$c42
  5208.  
  5209.  dc.w $80
  5210. pch2:
  5211.  dc.w 0
  5212.  dc.w $82
  5213. pcl2:
  5214.  dc.w 0
  5215.  
  5216.  dc.w $88,0
  5217.  
  5218.  dc.w $ffff,$fffe       ; End copper list.
  5219.  
  5220.  ds.l 104*10
  5221.  
  5222. old: dc.l 0
  5223.  
  5224. PanelCop:
  5225.  
  5226.  dc.w bplcon0,1
  5227.  
  5228.  dc.w $106,$c42
  5229.  dc.w $10c,1
  5230.  dc.w $10e,0
  5231.  
  5232.  incbin "Panelcols"
  5233.  
  5234.  dc.w $108,0
  5235.  dc.w $10a,0
  5236.  
  5237.  dc.w bpl1pth
  5238. p1h
  5239.  dc.w 0
  5240.  
  5241.  dc.w bpl1ptl
  5242. p1l
  5243.  dc.w 0
  5244.  
  5245.  dc.w bpl2pth
  5246. p2h
  5247.  dc.w 0
  5248.  
  5249.  dc.w bpl2ptl
  5250. p2l
  5251.  dc.w 0
  5252.  
  5253.  dc.w bpl3pth
  5254. p3h
  5255.  dc.w 0
  5256.  
  5257.  dc.w bpl3ptl
  5258. p3l
  5259.  dc.w 0
  5260.  
  5261.  dc.w bpl4pth
  5262. p4h
  5263.  dc.w 0
  5264.  dc.w bpl4ptl
  5265. p4l
  5266.  dc.w 0
  5267.  dc.w bpl5pth
  5268. p5h
  5269.  dc.w 0
  5270.  dc.w bpl5ptl
  5271. p5l
  5272.  dc.w 0
  5273.  
  5274.  dc.w $80
  5275. och:
  5276.  dc.w 0
  5277.  dc.w $82
  5278. ocl:
  5279.  dc.w 0
  5280.  
  5281.  dc.w $106,$2c40
  5282.  incbin "borderpal"
  5283.  dc.w $10c,$3
  5284.  dc.w $106,$c40
  5285.  
  5286.  dc.w $cf01,$ff00
  5287.  dc.w bplcon0
  5288. Panelcon: dc.w $5201
  5289.  dc.w $180,$fff
  5290.  
  5291.  dc.w $f801,$ff00
  5292.  dc.w col1,$50
  5293.  dc.w $f901,$ff00
  5294.  dc.w col1,$90
  5295.  dc.w $fa01,$ff00
  5296.  dc.w col1,$f0
  5297.  dc.w $fb01,$ff00
  5298.  dc.w col1,$f0
  5299.  dc.w $fc01,$ff00
  5300.  dc.w col1,$90
  5301.  dc.w $fd01,$ff00
  5302.  dc.w col1,$50
  5303.  
  5304.  dc.w $fe01,$ff00
  5305.  dc.w col1,$fff
  5306.  
  5307.  dc.w $ffdf,$fffe
  5308.  dc.w $a01,$ff00
  5309.  dc.w bplcon0,$201
  5310.  
  5311.  incbin "faces2cols"
  5312.  dc.w bpl1pth
  5313. f1h
  5314.  dc.w 0
  5315.  
  5316.  dc.w bpl1ptl
  5317. f1l
  5318.  dc.w 0
  5319.  
  5320.  dc.w bpl2pth
  5321. f2h
  5322.  dc.w 0
  5323.  
  5324.  dc.w bpl2ptl
  5325. f2l
  5326.  dc.w 0
  5327.  
  5328.  dc.w bpl3pth
  5329. f3h
  5330.  dc.w 0
  5331.  
  5332.  dc.w bpl3ptl
  5333. f3l
  5334.  dc.w 0
  5335.  
  5336.  dc.w bpl4pth
  5337. f4h
  5338.  dc.w 0
  5339.  dc.w bpl4ptl
  5340. f4l
  5341.  dc.w 0
  5342.  
  5343.  dc.w bpl5pth
  5344. f5h
  5345.  dc.w 0
  5346.  dc.w bpl5ptl
  5347. f5l
  5348.  dc.w 0
  5349.  
  5350.  dc.w $0c01,$ff00
  5351.  dc.w bplcon0,$5201
  5352.   
  5353.  dc.w $ffff,$fffe
  5354.  
  5355.  cnop 0,64
  5356. FacePlace:
  5357.  ds.l 6*32*5
  5358.  
  5359.  
  5360. ********************************************
  5361. * Stuff you don't have to worry about yet. *
  5362. ********************************************
  5363.  
  5364. closeeverything:
  5365.  
  5366.  move.l #$dff000,a6
  5367.  move.l old,$dff080     ; Restore old copper list.
  5368.  move.l old,d0
  5369.  move.w d0,ocl
  5370.  swap d0
  5371.  move.w d0,och
  5372.  move.w #$8020,dmacon(a6)
  5373.  move.w #$f,dmacon(a6)
  5374.  move.l saveit,$6c.w
  5375.  move.l OLDKINT,$68.w
  5376.  move.w saveinters,d0
  5377.  or.w #$c000,d0
  5378.  move.w d0,intena(a6)
  5379.  clr.w $dff0a8
  5380.  clr.w $dff0b8
  5381.  clr.w $dff0c8
  5382.  clr.w $dff0d8
  5383.  
  5384. ; move.w #3,d0
  5385. ;nonewvbl
  5386. ; btst #5,intreqrl(a6)
  5387. ; beq.s nonewvbl
  5388. ; move.w #$20,intreq(a6)
  5389. ; dbra d0,nonewvbl
  5390.  
  5391. ; move.l oldview,a1
  5392. ; move.l a1,d0
  5393. ; move.l gfxbase,a6
  5394. ; jsr -$de(a6)
  5395.  
  5396.  move.l gfxbase,d0
  5397.  move.l d0,a1
  5398.  move.l 4.w,a6
  5399.  jsr CloseLib(a6)
  5400.  
  5401.  cmp.b #'t',option+1
  5402.  beq.s leaveold
  5403.  move.w #$f8e,$dff1dc
  5404. leaveold:
  5405.  
  5406.  move.l 4.w,a6
  5407.  move.l #doslibname,a1
  5408.  moveq #0,d0
  5409.  jsr -552(a6)
  5410.  move.l d0,doslib
  5411.  
  5412.  move.l d0,a6
  5413.  move.l #RECname,d1
  5414.  move.l #1006,d2
  5415.  jsr -30(a6)
  5416.  move.l d0,REChandle
  5417.  
  5418.  move.l doslib,a6
  5419.  move.l d0,d1
  5420.  move.l #RECORDBUFFER,d2
  5421.  move.l #50000,d3
  5422.  jsr -48(a6)
  5423.  
  5424.  move.l doslib,a6
  5425.  move.l REChandle,d1
  5426.  jsr -36(a6)
  5427.  
  5428.  move.l doslib,d0
  5429.  move.l d0,a1
  5430.  move.l 4.w,a6
  5431.  jsr CloseLib(a6)
  5432.  
  5433.  
  5434.  rte
  5435.  
  5436. RECname: dc.b 'ab3:includes/RECORDING',0
  5437.  even
  5438. REChandle: dc.l 0
  5439. gfxbase: dc.l 0
  5440. oldview: dc.l 0
  5441.  
  5442. stuff:
  5443.  
  5444.     Lea    gfxname(pc),a1    
  5445.     Moveq.l    #0,d0
  5446.     Move.l    $4.w,a6    
  5447.     Jsr    -$228(a6)
  5448.     Move.l     d0,gfxbase
  5449.     Move.l    d0,a6                Use As Base Reg
  5450.     Move.l    34(a6),oldview
  5451.     move.l 38(a6),old
  5452.  
  5453.  jmp endstuff
  5454.  
  5455. gfxname dc.b "graphics.library",0
  5456.  
  5457.  even
  5458.  
  5459.  
  5460.  cnop 0,64
  5461.  
  5462. Panel:
  5463.  incbin "PanelRaw"
  5464.  
  5465. Blurb: incbin "blurbpic"
  5466.  
  5467. TimerScr: ds.b 40*64
  5468.  
  5469. scrntab:
  5470.  ds.b 16
  5471. val SET 32
  5472.  REPT 96
  5473.  dc.b val,val,val
  5474. val SET val+1
  5475.  ENDR
  5476.  ds.b 16
  5477.  
  5478.  cnop 0,64
  5479. scrn:
  5480.  
  5481.  dcb.l 8,$33333333
  5482.  dc.l 0
  5483.  dc.l 0
  5484.  
  5485.  dcb.l 8,$0f0f0f0f
  5486.  dc.l 0
  5487.  dc.l 0
  5488.  
  5489.  dcb.l 8,$00ff00ff
  5490.  dc.l 0
  5491.  dc.l 0
  5492.  
  5493.  dcb.l 8,$0000ffff
  5494.  dc.l 0
  5495.  dc.l 0
  5496.  
  5497.  dc.l 0,-1,0,-1,0,-1,0,-1
  5498.  dc.l 0
  5499.  dc.l 0
  5500.  
  5501.  dc.l -1,-1,0,0,-1,-1,0,0
  5502.  dc.l 0
  5503.  dc.l 0
  5504.  
  5505.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  5506.  dc.l 0
  5507.  dc.l 0
  5508.  
  5509. NumTimes: dc.l 0
  5510. TimeCount: dc.l 0
  5511. oldtime: dc.l 0
  5512. counting: dc.b 0
  5513. oktodisplay: dc.b 0
  5514.  
  5515. INITTIMER:
  5516.  move.l #0,TimeCount
  5517.  move.l #0,NumTimes
  5518.  rts
  5519.  
  5520. STARTCOUNT:
  5521.  move.l d0,-(a7)
  5522.  move.l $dff004,d0
  5523.  and.l #$1ffff,d0
  5524.  move.l d0,oldtime
  5525.  st counting
  5526.  move.l (a7)+,d0
  5527.  rts
  5528.  
  5529. STOPCOUNT:
  5530.  move.l d0,-(a7)
  5531.  move.l $dff004,d0
  5532.  and.l #$1ffff,d0
  5533.  
  5534.  sub.l oldtime,d0
  5535.  cmp.l #-256,d0
  5536.  bge.s okcount
  5537.  add.l #313*256,d0
  5538. okcount:
  5539.  add.l d0,TimeCount
  5540.  addq.l #1,NumTimes
  5541.  clr.b counting
  5542.  move.l (a7)+,d0
  5543.  rts
  5544.  
  5545. STOPCOUNTNOADD:
  5546.  move.l d0,-(a7)
  5547.  move.l $dff004,d0
  5548.  and.l #$1ffff,d0
  5549.  
  5550.  sub.l oldtime,d0
  5551.  cmp.l #-256,d0
  5552.  bge.s okcount2
  5553.  add.l #313*256,d0
  5554. okcount2:
  5555.  add.l d0,TimeCount
  5556.  clr.b counting
  5557.  move.l (a7)+,d0
  5558.  rts
  5559.  
  5560. maxbot: dc.w 0
  5561. tstneg: dc.l 0
  5562.  
  5563. STOPTIMER:
  5564.  st oktodisplay
  5565.  rts
  5566.  
  5567. digits: incbin "numbers.inc"
  5568.  
  5569.  
  5570.  Section Sounds,CODE_C
  5571.  
  5572. Scream: incbin "ab3:sounds/Scream"
  5573.  ds.w 100
  5574. EndScream:
  5575. LowScream: incbin "ab3:sounds/LowScream"
  5576.  ds.w 100
  5577. EndLowScream:
  5578. BaddieGun: incbin "ab3:sounds/BaddieGun"
  5579. EndBaddieGun:
  5580. bass: incbin "ab3:sounds/backbass+drum"
  5581. bassend:
  5582. Shoot: incbin "ab3:sounds/fire!"
  5583. EndShoot:
  5584. Munch: incbin "ab3:sounds/munch"
  5585. EndMunch:
  5586. PooGun: incbin "ab3:sounds/shoot.dm"
  5587. EndPooGun:
  5588. Collect: incbin "ab3:sounds/collect"
  5589. EndCollect:
  5590. DoorNoise: incbin "ab3:sounds/newdoor"
  5591. EndDoorNoise:
  5592. Stomp: incbin "ab3:sounds/footstep3"
  5593. EndStomp:
  5594. SwitchNoise: incbin "ab3:sounds/switch"
  5595. EndSwitch:
  5596.